mirror of
https://gitlab.nic.cz/turris/reforis/foris-js.git
synced 2025-06-15 13:36:35 +02:00
Compare commits
7 Commits
v6.1.1
...
fbdf1bc909
Author | SHA1 | Date | |
---|---|---|---|
fbdf1bc909 | |||
61e90d1e23 | |||
9e15f1e93e | |||
390e6cc807 | |||
e044439646 | |||
844ea9ea72 | |||
bf57281fa7 |
@ -1,3 +1,8 @@
|
||||
module.exports = {
|
||||
extends: "eslint-config-reforis",
|
||||
extends: ["eslint-config-reforis", "prettier"],
|
||||
plugins: ["prettier"],
|
||||
rules: {
|
||||
"prettier/prettier": ["error"],
|
||||
"import/prefer-default-export": "off",
|
||||
},
|
||||
};
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -51,3 +51,4 @@ coverage.xml
|
||||
dist/
|
||||
foris-*.tgz
|
||||
styleguide/
|
||||
testUtils
|
||||
|
@ -1,4 +1,4 @@
|
||||
image: registry.nic.cz/turris/reforis/reforis/reforis-image
|
||||
image: node:16-alpine
|
||||
|
||||
stages:
|
||||
- test
|
||||
@ -6,7 +6,7 @@ stages:
|
||||
- publish
|
||||
|
||||
before_script:
|
||||
- apt-get update && apt-get install -y make
|
||||
- apk add make
|
||||
- npm install
|
||||
|
||||
test:
|
||||
|
11
.prettierrc
Normal file
11
.prettierrc
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"singleQuote": false,
|
||||
"printWidth": 80,
|
||||
"proseWrap": "always",
|
||||
"tabWidth": 4,
|
||||
"useTabs": false,
|
||||
"trailingComma": "es5",
|
||||
"bracketSpacing": true,
|
||||
"jsxBracketSameLine": false,
|
||||
"semi": true
|
||||
}
|
430
CHANGELOG.md
430
CHANGELOG.md
@ -1,430 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to
|
||||
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [6.1.1] - 2024-08-30
|
||||
|
||||
### Added
|
||||
|
||||
- Added & updated Weblate translations
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated icon color classes to use "text-secondary" instead of "text-dark"
|
||||
- Updated Wi-Fi QRCodeModal component to use new styles & added close button
|
||||
- Refactored WiFiGuestForm component to get rid of obsolete div element
|
||||
- NPM audit fix
|
||||
|
||||
## [6.1.0] - 2024-08-23
|
||||
|
||||
### Added
|
||||
|
||||
- Added & updated Weblate translations
|
||||
|
||||
### Changed
|
||||
|
||||
- Migrated to Font Awesome v6
|
||||
- NPM audit fix
|
||||
|
||||
## [6.0.3] - 2024-07-26
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated WiFiQRCode component
|
||||
|
||||
## [6.0.2] - 2024-06-28
|
||||
|
||||
### Added
|
||||
|
||||
- Added className prop to CheckBox and Radio components
|
||||
|
||||
## [6.0.1] - 2024-06-26
|
||||
|
||||
### Added
|
||||
|
||||
- Added className prop to Switch component
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated dependencies in package.json
|
||||
- NPM audit fix
|
||||
|
||||
## [6.0.0] - 2024-06-11
|
||||
|
||||
### Added
|
||||
|
||||
- Added CHANGELOG.md
|
||||
- Added JS_DIR variable to Makefile
|
||||
- Added support for shared reForis ESLint configuration
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated dependencies in package.json
|
||||
- Updated Spinner.css styles for better positioning and responsiveness
|
||||
- Migrated to Bootstrap 5
|
||||
- NPM audit fix
|
||||
- Other small improvements
|
||||
|
||||
## [5.6.1] - 2024-01-19
|
||||
|
||||
- Added & updated Weblate translations
|
||||
- Fixed loading state & button's layout
|
||||
- Updated bootstrap library to version 4.6.2
|
||||
- Used custom reforis-image in GitLab CI/CD
|
||||
- NPM audit fix
|
||||
|
||||
## [5.6.0] - 2022-12-29
|
||||
|
||||
- Add & update Weblate translations
|
||||
- Add CustomizationContext and custom hook
|
||||
- Update caniuse-lite
|
||||
- Remove testUtils from .gitignore
|
||||
- Make ieee80211w_disabled as optional in WiFiForm
|
||||
- Move contexts in a context folder
|
||||
- NPM audit fix
|
||||
|
||||
## [5.5.0] - 2022-12-02
|
||||
|
||||
- Add & update translations
|
||||
- Add a switch to disable Management Frame Protection (802.11w)
|
||||
- Improved Foris JS documentation
|
||||
- NPM audit fix
|
||||
|
||||
## [5.4.1] - 2022-06-03
|
||||
|
||||
- Add Weblate translations
|
||||
- Update PropType peer dependency
|
||||
- NPM audit fix
|
||||
|
||||
## [5.4.0] - 2022-05-20
|
||||
|
||||
- Add & update translations
|
||||
- Add CopyInput bootstrap component
|
||||
- Update WiFiForm labels and description for wifi ax
|
||||
- Make WS path in lighttpd mode configurable
|
||||
- Fix Wi-Fi password helptext string
|
||||
- NPM audit fix
|
||||
|
||||
## [5.3.0] - 2022-02-21
|
||||
|
||||
- Added & update translations
|
||||
- Added rest of the props to DownloadButton component
|
||||
- Added hostname validation
|
||||
- Added wifi 802.11ax HE modes
|
||||
- Set best Wi-Fi HT mode depending on the checked frequency
|
||||
- Improved domain name RegEx pattern
|
||||
- Removed customOrder prop in Select component
|
||||
- Fixed Wi-Fi translation strings
|
||||
- Fixed autocomplete attribute in PasswordInput
|
||||
- Fixed WiFi password max length check
|
||||
- Fixed documentation build
|
||||
- Fixed access token in publish script
|
||||
- Refined & restructure Makefile
|
||||
- Updated GitLab CI image to Node.js v16
|
||||
- NPM update (several dependencies)
|
||||
- NPM audit fix
|
||||
|
||||
## [5.2.0] - 2021-12-15
|
||||
|
||||
- Remove login page
|
||||
- NPM audit fix
|
||||
|
||||
## [5.1.16] - 2021-11-18
|
||||
|
||||
- Revert bad NPM audit fix
|
||||
- NPM audit fix
|
||||
|
||||
## [5.1.15] - 2021-11-03
|
||||
|
||||
- Add WPA3 option
|
||||
- Add custom order ability of Select options
|
||||
- NPM audit fix
|
||||
|
||||
## [5.1.14] - 2021-07-30
|
||||
|
||||
- Add & update translations
|
||||
- Fix infinity redirect loop when WS error occurs
|
||||
- NPM audit fix
|
||||
|
||||
## [5.1.13] - 2021-06-30
|
||||
|
||||
- Add sentinelAgreement endpoint to forisUrls
|
||||
- NPM audit fix
|
||||
|
||||
## [5.1.12] - 2021-05-14
|
||||
|
||||
- Add & update translations
|
||||
- Add & fix obsolete links
|
||||
- Expend library with the ResetWifiSettings function
|
||||
- Fix switching Wi-Fi modes depending on bands in WiFiForm
|
||||
- Fix translation sources in WiFiForm
|
||||
- NPM audit fix
|
||||
- Other small improvements
|
||||
|
||||
## [5.1.11] - 2021-01-04
|
||||
|
||||
- Remove duplicated file for Norwegian language
|
||||
- Fix translations inconsistency
|
||||
|
||||
## [5.1.10] - 2021-12-29
|
||||
|
||||
- Add and update translations
|
||||
|
||||
## [5.1.9] - 2021-12-20
|
||||
|
||||
- Increase bottom margin of formFieldsSize
|
||||
- Change formFieldsSize of ResetWiFiSettings card
|
||||
- Fix trailing space in Modal classes
|
||||
|
||||
## [5.1.8] - 2020-12-19
|
||||
|
||||
- Add isPluginInstalled function
|
||||
|
||||
## [5.1.7] - 2020-11-27
|
||||
|
||||
## [5.1.6] - 2020-11-25
|
||||
|
||||
- NPM audit fix
|
||||
- Add displayCard function to utils
|
||||
- Add optional sizes to Modal
|
||||
- Add information about optional sizes to docs
|
||||
- Remove redundant merge.py
|
||||
|
||||
## [5.1.5] - 2020-09-25
|
||||
|
||||
- Fix DateTime import
|
||||
- Fix extra empty space in Switch's classes
|
||||
|
||||
## [5.1.4] - 2020-09-25
|
||||
|
||||
- Add inline option to Wi-Fi's RadioSet
|
||||
- Fix Alert's dismissible class condition
|
||||
- Add closing bootstrap modal using ESC
|
||||
- Change reboot modal's heading to "Warning!"
|
||||
|
||||
## [5.1.3] - 2020-09-11
|
||||
|
||||
- Add SSID validation for 32 bytes length
|
||||
- Add helpText for SSID input
|
||||
|
||||
## [5.1.2] - 2020-09-08
|
||||
|
||||
- Fix infinity loop caused by WebSockets
|
||||
- Resolve small issues
|
||||
|
||||
## [5.1.1] - 2020-08-31
|
||||
|
||||
- Add "inline" option to RadioSet
|
||||
- NPM audit fix
|
||||
|
||||
## [5.1.0] - 2020-08-25
|
||||
|
||||
- Add new Switch component
|
||||
- Swap checkboxes for switches on Wi-Fi page
|
||||
- Decrease button width on different breakpoints
|
||||
- Add integration of Prettier + ESLint + reForis Style Guide
|
||||
- Add appropriate links to dropdown headers
|
||||
- Add semantic & accessibility structure for headings
|
||||
- NPM audit & Update packages
|
||||
- GitLab CI: image update to node 10
|
||||
|
||||
## [5.0.3] - 2020-09-23
|
||||
|
||||
- Fixes issue with WebSockets
|
||||
|
||||
## [5.0.2] - 2020-09-22
|
||||
|
||||
- Fix infinity loop caused by WebSockets
|
||||
|
||||
## [5.0.1] - 2020-07-21
|
||||
|
||||
- Fix Wi-Fi Form
|
||||
- NPM audit fix & update of packages
|
||||
|
||||
## [5.0.0] - 2020-05-07
|
||||
|
||||
- I've realized that it should be major update due to broken API.
|
||||
|
||||
## [4.5.1] - 2020-05-07
|
||||
|
||||
- Add initialData to ForisForm children.
|
||||
- Update translations .pot file.
|
||||
|
||||
## [4.5.0] - 2020-03-25
|
||||
|
||||
- Use exposed pdfmake.
|
||||
- NPM audit fix & update of packages.
|
||||
|
||||
## [4.4.0] - 2020-03-13
|
||||
|
||||
- Update domain validation.
|
||||
|
||||
## [4.3.1] - 2020-03-06
|
||||
|
||||
- Add logout link.
|
||||
|
||||
## [4.3.0] - 2020-02-26
|
||||
|
||||
- Allow RadioSet accept elements as children.
|
||||
- Add option to make modal scrollable.
|
||||
|
||||
## [4.2.0] - 2020-02-21
|
||||
|
||||
- Add translations.
|
||||
- Improve datatime localization.
|
||||
|
||||
## [4.1.0] - 2020-02-20
|
||||
|
||||
- Added date and time utilities.
|
||||
|
||||
## [4.0.0] - 2020-02-20
|
||||
|
||||
- Throw an error if unhandled exception happens during API request.
|
||||
|
||||
## [3.4.0] - 2020-02-17
|
||||
|
||||
- Display actual GET error response within the form.
|
||||
- Added styles extracted from reForis.
|
||||
- Added reference to form element (for programmatically submitting it).
|
||||
|
||||
## [3.2.0] - 2020-01-17
|
||||
|
||||
- Swapped react-router with react-router-dom. Prepared Foris JS for using
|
||||
react-router-dom exposed by reForis.
|
||||
- Added controller ID filter to WebSocket hook.
|
||||
- Updated translation messages after moving WiFi form.
|
||||
- Increased request timeout to 30.5 sec.
|
||||
|
||||
## [3.1.1] - 2020-01-10
|
||||
|
||||
- Fixed package dependencies related to exposing libraries via reForis
|
||||
|
||||
## [3.1.0] - 2020-01-09
|
||||
|
||||
- Added Wi-Fi settings form
|
||||
- Fixed path to index.js file in package.json
|
||||
|
||||
## [3.0.0] - 2020-01-07
|
||||
|
||||
- Removal of Babel compiler
|
||||
- Fixed width of ForisForm, removed default sizing for form widgets (like
|
||||
buttons)
|
||||
|
||||
## [2.1.1] - 2020-01-06
|
||||
|
||||
- Display date and time picker above input element
|
||||
|
||||
## [2.1.0] - 2019-12-19
|
||||
|
||||
- Set WebSocket logging to debug level
|
||||
- Added hook that detects clicking outside of component
|
||||
- Added Radio to list of publicly available components
|
||||
- Fixed link to git repository in package.json
|
||||
|
||||
## [2.0.0] - 2019-12-09
|
||||
|
||||
- Added dynamic suffix for API URLs (allowing to use one hook for different
|
||||
resources with e.g. PUT)
|
||||
- Added unsubscribe method to WebSocket client
|
||||
- Added custom class to SpinnerElement
|
||||
- Improved documentation
|
||||
- Published README.md
|
||||
|
||||
## [1.4.0] - 2019-11-29
|
||||
|
||||
- Add reboot button.
|
||||
- Fix Foris URLs prefixes
|
||||
|
||||
## [1.3.3] - 2019-11-22
|
||||
|
||||
- Add translations from Weblate.
|
||||
|
||||
## [1.3.2] - 2019-11-20
|
||||
|
||||
- Expose only AlertContext.
|
||||
- Add hook for API pooling.
|
||||
|
||||
## [1.3.1] - 2019-11-14
|
||||
|
||||
## [1.2.0] - 2019-10-24
|
||||
|
||||
## [1.1.0] - 2019-10-22
|
||||
|
||||
## [1.0.0] - 2019-10-07
|
||||
|
||||
## [0.0.7] - 2019-09-02
|
||||
|
||||
[unreleased]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.1...master
|
||||
[6.1.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.0...v6.1.1
|
||||
[6.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.0.3...v6.1.0
|
||||
[6.0.3]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.0.2...v6.0.3
|
||||
[6.0.2]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.0.1...v6.0.2
|
||||
[6.0.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.0.0...v6.0.1
|
||||
[6.0.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.6.1...v6.0.0
|
||||
[5.6.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.6.0...v5.6.1
|
||||
[5.6.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.5.0...v5.6.0
|
||||
[5.5.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.4.1...v5.5.0
|
||||
[5.4.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.4.0...v5.4.1
|
||||
[5.4.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.3.0...v5.4.0
|
||||
[5.3.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.2.0...v5.3.0
|
||||
[5.2.0]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.16...v5.2.0
|
||||
[5.1.16]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.15...v5.1.16
|
||||
[5.1.15]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.14...v5.1.15
|
||||
[5.1.14]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.13...v5.1.14
|
||||
[5.1.13]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.12...v5.1.13
|
||||
[5.1.12]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.11...v5.1.12
|
||||
[5.1.11]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.10...v5.1.11
|
||||
[5.1.10]:
|
||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.9...v5.1.10
|
||||
[5.1.9]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.8...v5.1.9
|
||||
[5.1.8]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.7...v5.1.8
|
||||
[5.1.7]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.6...v5.1.7
|
||||
[5.1.6]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.5...v5.1.6
|
||||
[5.1.5]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.4...v5.1.5
|
||||
[5.1.4]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.3...v5.1.4
|
||||
[5.1.3]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.2...v5.1.3
|
||||
[5.1.2]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.1...v5.1.2
|
||||
[5.1.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.1.0...v5.1.1
|
||||
[5.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.0.3...v5.1.0
|
||||
[5.0.3]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.0.2...v5.0.3
|
||||
[5.0.2]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.0.1...v5.0.2
|
||||
[5.0.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v5.5.0...v5.0.1
|
||||
[5.0.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v4.5.1...v5.0.0
|
||||
[4.5.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v4.5.0...v4.5.1
|
||||
[4.5.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v4.4.0...v4.5.0
|
||||
[4.4.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v4.3.1...v4.4.0
|
||||
[4.3.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v4.3.0...v4.3.1
|
||||
[4.3.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v4.2.0...v4.3.0
|
||||
[4.2.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v4.1.0...v4.2.0
|
||||
[4.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v4.0.0...v4.1.0
|
||||
[4.0.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v3.4.0...v4.0.0
|
||||
[3.4.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v3.2.0...v3.4.0
|
||||
[3.2.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v3.1.1...v3.2.0
|
||||
[3.1.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v3.1.0...v3.1.1
|
||||
[3.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v3.0.0...v3.1.0
|
||||
[3.0.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v2.1.1...v3.0.0
|
||||
[2.1.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v2.1.0...v2.1.1
|
||||
[2.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v2.0.0...v2.1.0
|
||||
[2.0.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v1.4.0...v2.0.0
|
||||
[1.4.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v1.3.3...v1.4.0
|
||||
[1.3.3]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v1.3.2...v1.3.3
|
||||
[1.3.2]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v1.3.1...v1.3.2
|
||||
[1.3.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v1.2.0...v1.3.1
|
||||
[1.2.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v1.1.0...v1.2.0
|
||||
[1.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v1.0.0...v1.1.0
|
||||
[1.0.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v0.0.7...v1.0.0
|
||||
[0.0.7]: https://gitlab.nic.cz/turris/reforis/foris-js/-/tags/v0.0.7
|
1
Makefile
1
Makefile
@ -11,7 +11,6 @@ MSGID_BUGS_ADDRESS="tech.support@turris.cz"
|
||||
|
||||
DEV_PYTHON=python3
|
||||
VENV_NAME?=venv
|
||||
JS_DIR=js
|
||||
VENV_BIN=$(shell pwd)/$(VENV_NAME)/bin
|
||||
|
||||
.PHONY: all
|
||||
|
@ -19,7 +19,6 @@ module.exports = {
|
||||
collectCoverageFrom: ["src/**/*.{js,jsx}"],
|
||||
coverageDirectory: "coverage",
|
||||
testPathIgnorePatterns: ["/node_modules/", "/__fixtures__/", "/dist/"],
|
||||
testEnvironment: "jsdom",
|
||||
verbose: false,
|
||||
setupFilesAfterEnv: [
|
||||
"@testing-library/react/cleanup-after-each",
|
||||
|
29505
package-lock.json
generated
29505
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
58
package.json
58
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "foris",
|
||||
"version": "6.1.1",
|
||||
"version": "5.2.0",
|
||||
"description": "Foris JS library is a set of components and utils for reForis application and plugins.",
|
||||
"author": "CZ.NIC, z.s.p.o.",
|
||||
"repository": {
|
||||
@ -14,51 +14,49 @@
|
||||
"license": "GPL-3.0",
|
||||
"main": "./src/index.js",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^6.6.0",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.6.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.6.0",
|
||||
"@fortawesome/react-fontawesome": "^0.2.2",
|
||||
"axios": "^1.7.2",
|
||||
"immutability-helper": "^3.1.1",
|
||||
"moment": "^2.30.1",
|
||||
"qrcode.react": "^3.1.0",
|
||||
"react-datetime": "^3.2.0",
|
||||
"react-uid": "^2.3.3"
|
||||
"axios": "^0.21.1",
|
||||
"immutability-helper": "3.0.1",
|
||||
"moment": "^2.24.0",
|
||||
"qrcode.react": "^0.9.3",
|
||||
"react-datetime": "^3.0.4",
|
||||
"react-uid": "^2.2.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bootstrap": "^5.3.3",
|
||||
"prop-types": "15.8.1",
|
||||
"bootstrap": "4.4.1",
|
||||
"prop-types": "15.7.2",
|
||||
"react": "16.9.0",
|
||||
"react-dom": "16.9.0",
|
||||
"react-router-dom": "^5.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.24.7",
|
||||
"@babel/core": "^7.24.7",
|
||||
"@babel/plugin-transform-runtime": "^7.24.7",
|
||||
"@babel/preset-env": "^7.24.7",
|
||||
"@babel/preset-react": "^7.24.7",
|
||||
"@babel/cli": "^7.12.10",
|
||||
"@babel/core": "^7.9.0",
|
||||
"@babel/plugin-transform-runtime": "^7.9.0",
|
||||
"@babel/preset-env": "^7.9.0",
|
||||
"@babel/preset-react": "^7.9.4",
|
||||
"@fortawesome/fontawesome-free": "^5.13.0",
|
||||
"@testing-library/react": "^8.0.9",
|
||||
"babel-loader": "^8.1.0",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
"bootstrap": "^5.3.3",
|
||||
"bootstrap": "^4.5.0",
|
||||
"css-loader": "^5.2.4",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-reforis": "^2.1.1",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-config-prettier": "^6.11.0",
|
||||
"eslint-config-reforis": "^1.0.0",
|
||||
"eslint-plugin-prettier": "^3.1.4",
|
||||
"file-loader": "^6.0.0",
|
||||
"jest": "^29.7.0",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"jest-mock-axios": "^4.7.3",
|
||||
"moment-timezone": "^0.5.45",
|
||||
"prettier": "^3.3.2",
|
||||
"prop-types": "15.8.1",
|
||||
"jest": "^25.2.0",
|
||||
"jest-mock-axios": "^3.2.0",
|
||||
"moment-timezone": "^0.5.28",
|
||||
"prettier": "2.0.5",
|
||||
"prop-types": "15.7.2",
|
||||
"react": "16.9.0",
|
||||
"react-dom": "16.9.0",
|
||||
"react-router-dom": "^5.1.2",
|
||||
"react-styleguidist": "^12.0.1",
|
||||
"snapshot-diff": "^0.10.0",
|
||||
"react-styleguidist": "^11.2.0",
|
||||
"snapshot-diff": "^0.7.0",
|
||||
"style-loader": "^1.2.1",
|
||||
"webpack": "^5.92.1"
|
||||
"webpack": "^5.68.0"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint src",
|
||||
|
@ -1 +0,0 @@
|
||||
module.exports = require("eslint-config-reforis/prettier.config");
|
@ -6,7 +6,8 @@ then
|
||||
exit 1
|
||||
else
|
||||
cd dist
|
||||
echo "//registry.npmjs.org/:_authToken=$(echo "$NPM_TOKEN")" > .npmrc
|
||||
# Need to replace "_" with "-" as GitLab CI won't accept secret vars with "-"
|
||||
echo "//registry.npmjs.org/:_authToken=$(echo "$NPM_TOKEN" | tr _ -)" > .npmrc
|
||||
echo "unsafe-perm = true" >> ~/.npmrc
|
||||
if test "$1" = "beta"
|
||||
then
|
||||
|
@ -1,16 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useState, useContext, useCallback, useMemo } from "react";
|
||||
|
||||
import React, { useState, useContext, useCallback } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import Alert, { ALERT_TYPES } from "../../bootstrap/Alert";
|
||||
import Portal from "../../utils/Portal";
|
||||
import { Alert, ALERT_TYPES } from "../bootstrap/Alert";
|
||||
import { Portal } from "../utils/Portal";
|
||||
|
||||
AlertContextProvider.propTypes = {
|
||||
children: PropTypes.oneOfType([
|
||||
@ -31,10 +30,6 @@ function AlertContextProvider({ children }) {
|
||||
);
|
||||
|
||||
const dismissAlert = useCallback(() => setAlert(null), [setAlert]);
|
||||
const contextValue = useMemo(
|
||||
() => [setAlertWrapper, dismissAlert],
|
||||
[setAlertWrapper, dismissAlert]
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
@ -45,7 +40,7 @@ function AlertContextProvider({ children }) {
|
||||
</Alert>
|
||||
</Portal>
|
||||
)}
|
||||
<AlertContext.Provider value={contextValue}>
|
||||
<AlertContext.Provider value={[setAlertWrapper, dismissAlert]}>
|
||||
{children}
|
||||
</AlertContext.Provider>
|
||||
</>
|
@ -48,7 +48,7 @@ describe("AlertContext", () => {
|
||||
// Alert is present
|
||||
expect(getByText(componentContainer, "Alert content")).toBeDefined();
|
||||
|
||||
fireEvent.click(componentContainer.querySelector(".btn-close"));
|
||||
fireEvent.click(componentContainer.querySelector(".close"));
|
||||
// Alert is gone
|
||||
expect(queryByText(componentContainer, "Alert content")).toBeNull();
|
||||
});
|
@ -6,13 +6,14 @@ exports[`AlertContext should render alert 1`] = `
|
||||
id="alert-container"
|
||||
>
|
||||
<div
|
||||
class="alert alert-danger alert-dismissible"
|
||||
class="alert alert-dismissible alert-danger"
|
||||
>
|
||||
<button
|
||||
aria-label="Close"
|
||||
class="btn-close"
|
||||
class="close"
|
||||
type="button"
|
||||
/>
|
||||
>
|
||||
×
|
||||
</button>
|
||||
Alert content
|
||||
</div>
|
||||
</div>
|
@ -111,8 +111,9 @@ const useAPIPatch = createAPIHook("PATCH");
|
||||
const useAPIPut = createAPIHook("PUT");
|
||||
const useAPIDelete = createAPIHook("DELETE");
|
||||
|
||||
/* eslint-disable default-param-last */
|
||||
function useAPIPolling(endpoint, delay = 1000, until) {
|
||||
export { useAPIGet, useAPIPost, useAPIPatch, useAPIPut, useAPIDelete };
|
||||
|
||||
export function useAPIPolling(endpoint, delay = 1000, until) {
|
||||
// delay ms
|
||||
const [state, setState] = useState({ state: API_STATE.INIT });
|
||||
const [getResponse, get] = useAPIGet(endpoint);
|
||||
@ -132,12 +133,3 @@ function useAPIPolling(endpoint, delay = 1000, until) {
|
||||
|
||||
return [state];
|
||||
}
|
||||
|
||||
export {
|
||||
useAPIGet,
|
||||
useAPIPost,
|
||||
useAPIPatch,
|
||||
useAPIPut,
|
||||
useAPIDelete,
|
||||
useAPIPolling,
|
||||
};
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
export const ALERT_TYPES = Object.freeze({
|
||||
@ -36,24 +35,21 @@ Alert.defaultProps = {
|
||||
type: ALERT_TYPES.DANGER,
|
||||
};
|
||||
|
||||
function Alert({ type, onDismiss, children }) {
|
||||
export function Alert({ type, onDismiss, children }) {
|
||||
return (
|
||||
<div
|
||||
className={`alert alert-${type} ${
|
||||
className={`alert ${
|
||||
onDismiss ? "alert-dismissible" : ""
|
||||
}`.trim()}
|
||||
} alert-${type}`}
|
||||
>
|
||||
{onDismiss && (
|
||||
<button
|
||||
type="button"
|
||||
className="btn-close"
|
||||
onClick={onDismiss}
|
||||
aria-label={_("Close")}
|
||||
/>
|
||||
{onDismiss ? (
|
||||
<button type="button" className="close" onClick={onDismiss}>
|
||||
×
|
||||
</button>
|
||||
) : (
|
||||
false
|
||||
)}
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Alert;
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
Button.propTypes = {
|
||||
@ -25,28 +24,31 @@ Button.propTypes = {
|
||||
]).isRequired,
|
||||
};
|
||||
|
||||
function Button({ className, loading, forisFormSize, children, ...props }) {
|
||||
let buttonClass = className ? `btn ${className}` : "btn btn-primary";
|
||||
export function Button({
|
||||
className,
|
||||
loading,
|
||||
forisFormSize,
|
||||
children,
|
||||
...props
|
||||
}) {
|
||||
let buttonClass = className ? `btn ${className}` : "btn btn-primary ";
|
||||
if (forisFormSize) {
|
||||
buttonClass = `${buttonClass} col-12 col-md-3 col-lg-2`;
|
||||
buttonClass = `${buttonClass} col-sm-12 col-md-3 col-lg-2`;
|
||||
}
|
||||
|
||||
const span = loading ? (
|
||||
<span
|
||||
className="spinner-border spinner-border-sm"
|
||||
role="status"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
) : null;
|
||||
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className={`${buttonClass} d-inline-flex justify-content-center align-items-center`}
|
||||
{...props}
|
||||
>
|
||||
{loading && (
|
||||
<span
|
||||
className="spinner-border spinner-border-sm me-1"
|
||||
role="status"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
)}
|
||||
<span>{children}</span>
|
||||
<button type="button" className={buttonClass} {...props}>
|
||||
{span}
|
||||
{span ? " " : null}
|
||||
{children}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
export default Button;
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
import { useUID } from "react-uid";
|
||||
|
||||
@ -17,36 +16,33 @@ CheckBox.propTypes = {
|
||||
helpText: PropTypes.string,
|
||||
/** Control if checkbox is clickable */
|
||||
disabled: PropTypes.bool,
|
||||
/** Additional class name */
|
||||
className: PropTypes.string,
|
||||
};
|
||||
|
||||
CheckBox.defaultProps = {
|
||||
disabled: false,
|
||||
};
|
||||
|
||||
function CheckBox({ label, helpText, disabled, className, ...props }) {
|
||||
export function CheckBox({ label, helpText, disabled, ...props }) {
|
||||
const uid = useUID();
|
||||
|
||||
return (
|
||||
<div className={`${className || "mb-3"} form-check`.trim()}>
|
||||
<input
|
||||
className="form-check-input"
|
||||
type="checkbox"
|
||||
id={uid}
|
||||
disabled={disabled}
|
||||
{...props}
|
||||
/>
|
||||
<label className="form-check-label" htmlFor={uid}>
|
||||
{label}
|
||||
</label>
|
||||
{helpText && (
|
||||
<div className="form-text">
|
||||
<small>{helpText}</small>
|
||||
</div>
|
||||
)}
|
||||
<div className="form-group">
|
||||
<div className="custom-control custom-checkbox ">
|
||||
<input
|
||||
className="custom-control-input"
|
||||
type="checkbox"
|
||||
id={uid}
|
||||
disabled={disabled}
|
||||
{...props}
|
||||
/>
|
||||
<label className="custom-control-label" htmlFor={uid}>
|
||||
{label}
|
||||
{helpText && (
|
||||
<small className="form-text text-muted">
|
||||
{helpText}
|
||||
</small>
|
||||
)}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default CheckBox;
|
||||
|
@ -1,64 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useState, useRef } from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import Input from "./Input";
|
||||
|
||||
CopyInput.propTypes = {
|
||||
/** Field label. */
|
||||
label: PropTypes.string.isRequired,
|
||||
/** Field value. */
|
||||
value: PropTypes.string,
|
||||
/** Help text message. */
|
||||
helpText: PropTypes.string,
|
||||
/** Disable input field */
|
||||
disabled: PropTypes.bool,
|
||||
/** Readonly input field */
|
||||
readOnly: PropTypes.bool,
|
||||
};
|
||||
|
||||
function CopyInput({ value, ...props }) {
|
||||
const inputTextRef = useRef();
|
||||
const [isCopied, setIsCopied] = useState(false);
|
||||
|
||||
const handleCopyClick = async () => {
|
||||
// Clipboard API works only in a secure (HTTPS) context.
|
||||
if (navigator.clipboard) {
|
||||
await navigator.clipboard.writeText(value);
|
||||
} else {
|
||||
// Fallback to the "classic" copy to clipboard implementation.
|
||||
inputTextRef.current.focus();
|
||||
inputTextRef.current.select();
|
||||
document.execCommand("copy");
|
||||
inputTextRef.current.blur();
|
||||
}
|
||||
|
||||
setIsCopied(true);
|
||||
setTimeout(() => {
|
||||
setIsCopied(false);
|
||||
}, 1500);
|
||||
};
|
||||
|
||||
return (
|
||||
<Input type="text" value={value} ref={inputTextRef} {...props}>
|
||||
<div className="input-group-append">
|
||||
<button
|
||||
className="btn btn-outline-secondary"
|
||||
type="button"
|
||||
onClick={handleCopyClick}
|
||||
>
|
||||
<span>{isCopied ? _("Copied!") : _("Copy")}</span>
|
||||
</button>
|
||||
</div>
|
||||
</Input>
|
||||
);
|
||||
}
|
||||
|
||||
export default CopyInput;
|
@ -1,17 +0,0 @@
|
||||
CopyInput Bootstrap component contains input with a label, predefined sizes, and
|
||||
structure for use in ForisForm and the "Copy" button (copy to clipboard). It can
|
||||
be used with `readOnly` and `disabled` parameters, please see an example.
|
||||
|
||||
All additional `props` are passed to the `<input type="text">` HTML component.
|
||||
|
||||
```js
|
||||
import React, { useState } from "react";
|
||||
const [value, setValue] = useState("Text to appear in clipboard.");
|
||||
|
||||
<CopyInput
|
||||
label="Copy me"
|
||||
value={value}
|
||||
helpText="Read the small text!"
|
||||
readOnly
|
||||
/>;
|
||||
```
|
@ -1,19 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import moment from "moment/moment";
|
||||
import PropTypes from "prop-types";
|
||||
import Datetime from "react-datetime";
|
||||
import moment from "moment/moment";
|
||||
import "react-datetime/css/react-datetime.css";
|
||||
import "./DataTimeInput.css";
|
||||
|
||||
import Input from "./Input";
|
||||
import { Input } from "./Input";
|
||||
|
||||
DataTimeInput.propTypes = {
|
||||
/** Field label. */
|
||||
@ -38,7 +37,7 @@ DataTimeInput.propTypes = {
|
||||
const DEFAULT_DATE_FORMAT = "YYYY-MM-DD";
|
||||
const DEFAULT_TIME_FORMAT = "HH:mm:ss";
|
||||
|
||||
function DataTimeInput({
|
||||
export function DataTimeInput({
|
||||
value,
|
||||
onChange,
|
||||
isValidDate,
|
||||
@ -47,13 +46,13 @@ function DataTimeInput({
|
||||
children,
|
||||
...props
|
||||
}) {
|
||||
const renderInput = (datetimeProps) => {
|
||||
function renderInput(datetimeProps) {
|
||||
return (
|
||||
<Input {...props} {...datetimeProps}>
|
||||
{children}
|
||||
</Input>
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
return (
|
||||
<Datetime
|
||||
@ -71,5 +70,3 @@ function DataTimeInput({
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default DataTimeInput;
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
DownloadButton.propTypes = {
|
||||
@ -22,7 +21,7 @@ DownloadButton.defaultProps = {
|
||||
className: "btn-primary",
|
||||
};
|
||||
|
||||
function DownloadButton({ href, className, children, ...props }) {
|
||||
export function DownloadButton({ href, className, children, ...props }) {
|
||||
return (
|
||||
<a
|
||||
href={href}
|
||||
@ -34,5 +33,3 @@ function DownloadButton({ href, className, children, ...props }) {
|
||||
</a>
|
||||
);
|
||||
}
|
||||
|
||||
export default DownloadButton;
|
||||
|
@ -6,14 +6,11 @@
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import Input from "./Input";
|
||||
import { Input } from "./Input";
|
||||
|
||||
function EmailInput({ ...props }) {
|
||||
return <Input type="email" {...props} />;
|
||||
}
|
||||
export const EmailInput = ({ ...props }) => <Input type="email" {...props} />;
|
||||
|
||||
EmailInput.propTypes = {
|
||||
/** Field label. */
|
||||
@ -25,5 +22,3 @@ EmailInput.propTypes = {
|
||||
/** Email value. */
|
||||
value: PropTypes.string,
|
||||
};
|
||||
|
||||
export default EmailInput;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
@ -8,8 +8,7 @@
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import Input from "./Input";
|
||||
import { Input } from "./Input";
|
||||
|
||||
FileInput.propTypes = {
|
||||
/** Field label. */
|
||||
@ -24,7 +23,7 @@ FileInput.propTypes = {
|
||||
multiple: PropTypes.bool,
|
||||
};
|
||||
|
||||
function FileInput({ ...props }) {
|
||||
export function FileInput({ ...props }) {
|
||||
return (
|
||||
<Input
|
||||
type="file"
|
||||
@ -35,5 +34,3 @@ function FileInput({ ...props }) {
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default FileInput;
|
||||
|
@ -1,67 +1,13 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { forwardRef } from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
import React from "react";
|
||||
import { useUID } from "react-uid";
|
||||
|
||||
/** Base bootstrap input component. */
|
||||
const Input = forwardRef(
|
||||
(
|
||||
{
|
||||
type,
|
||||
label,
|
||||
helpText,
|
||||
error,
|
||||
className,
|
||||
children,
|
||||
labelClassName,
|
||||
groupClassName,
|
||||
...props
|
||||
},
|
||||
ref
|
||||
) => {
|
||||
const uid = useUID();
|
||||
|
||||
const inputClassName = `${className || ""} ${
|
||||
error ? "is-invalid" : ""
|
||||
}`.trim();
|
||||
|
||||
return (
|
||||
<div className="mb-3">
|
||||
<label
|
||||
className={`form-label ${labelClassName || ""}`.trim()}
|
||||
htmlFor={uid}
|
||||
>
|
||||
{label}
|
||||
</label>
|
||||
<div className={`input-group ${groupClassName || ""}`.trim()}>
|
||||
<input
|
||||
className={`form-control ${inputClassName}`.trim()}
|
||||
type={type}
|
||||
id={uid}
|
||||
ref={ref}
|
||||
{...props}
|
||||
/>
|
||||
{children}
|
||||
</div>
|
||||
{error && <div className="invalid-feedback">{error}</div>}
|
||||
{helpText && (
|
||||
<div className="form-text">
|
||||
<small>{helpText}</small>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
Input.displayName = "Input";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
Input.propTypes = {
|
||||
type: PropTypes.string.isRequired,
|
||||
@ -77,4 +23,40 @@ Input.propTypes = {
|
||||
groupClassName: PropTypes.string,
|
||||
};
|
||||
|
||||
export default Input;
|
||||
/** Base bootstrap input component. */
|
||||
export function Input({
|
||||
type,
|
||||
label,
|
||||
helpText,
|
||||
error,
|
||||
className,
|
||||
children,
|
||||
labelClassName,
|
||||
groupClassName,
|
||||
...props
|
||||
}) {
|
||||
const uid = useUID();
|
||||
const inputClassName = `form-control ${className || ""} ${
|
||||
error ? "is-invalid" : ""
|
||||
}`.trim();
|
||||
return (
|
||||
<div className="form-group">
|
||||
<label className={labelClassName} htmlFor={uid}>
|
||||
{label}
|
||||
</label>
|
||||
<div className={`input-group ${groupClassName || ""}`.trim()}>
|
||||
<input
|
||||
className={inputClassName}
|
||||
type={type}
|
||||
id={uid}
|
||||
{...props}
|
||||
/>
|
||||
{children}
|
||||
</div>
|
||||
{error ? <div className="invalid-feedback">{error}</div> : null}
|
||||
{helpText ? (
|
||||
<small className="form-text text-muted">{helpText}</small>
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -1,16 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useRef, useEffect } from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { Portal } from "../utils/Portal";
|
||||
import { useClickOutside } from "../utils/hooks";
|
||||
import Portal from "../utils/Portal";
|
||||
import "./Modal.css";
|
||||
|
||||
Modal.propTypes = {
|
||||
@ -93,10 +92,11 @@ export function ModalHeader({ setShown, title }) {
|
||||
<h5 className="modal-title">{title}</h5>
|
||||
<button
|
||||
type="button"
|
||||
className="btn-close"
|
||||
className="close"
|
||||
onClick={() => setShown(false)}
|
||||
aria-label={_("Close")}
|
||||
/>
|
||||
>
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -1,18 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import { faMinus, faPlus } from "@fortawesome/free-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import Input from "./Input";
|
||||
import { useConditionalTimeout } from "../utils/hooks";
|
||||
import { Input } from "./Input";
|
||||
import "./NumberInput.css";
|
||||
|
||||
NumberInput.propTypes = {
|
||||
@ -26,7 +23,7 @@ NumberInput.propTypes = {
|
||||
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
||||
/** Function called when value changes. */
|
||||
onChange: PropTypes.func.isRequired,
|
||||
/** Additional description displayed to the right of input value. */
|
||||
/** Additional description dispaled to the right of input value. */
|
||||
inlineText: PropTypes.string,
|
||||
};
|
||||
|
||||
@ -34,7 +31,7 @@ NumberInput.defaultProps = {
|
||||
value: 0,
|
||||
};
|
||||
|
||||
function NumberInput({ onChange, inlineText, value, ...props }) {
|
||||
export function NumberInput({ onChange, inlineText, value, ...props }) {
|
||||
function updateValue(initialValue, difference) {
|
||||
onChange({ target: { value: initialValue + difference } });
|
||||
}
|
||||
@ -52,29 +49,27 @@ function NumberInput({ onChange, inlineText, value, ...props }) {
|
||||
|
||||
return (
|
||||
<Input type="number" onChange={onChange} value={value} {...props}>
|
||||
{inlineText && (
|
||||
<span className="input-group-text">{inlineText}</span>
|
||||
)}
|
||||
<button
|
||||
type="button"
|
||||
className="btn btn-outline-secondary"
|
||||
onMouseDown={() => enableIncrease(true)}
|
||||
onMouseUp={() => enableIncrease(false)}
|
||||
aria-label="Increase"
|
||||
>
|
||||
<FontAwesomeIcon icon={faPlus} />
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
className="btn btn-outline-secondary"
|
||||
onMouseDown={() => enableDecrease(true)}
|
||||
onMouseUp={() => enableDecrease(false)}
|
||||
aria-label="Decrease"
|
||||
>
|
||||
<FontAwesomeIcon icon={faMinus} />
|
||||
</button>
|
||||
<div className="input-group-append">
|
||||
{inlineText && <p className="input-group-text">{inlineText}</p>}
|
||||
<button
|
||||
type="button"
|
||||
className="btn btn-outline-secondary"
|
||||
onMouseDown={() => enableIncrease(true)}
|
||||
onMouseUp={() => enableIncrease(false)}
|
||||
aria-label="Increase"
|
||||
>
|
||||
<i className="fas fa-plus" />
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
className="btn btn-outline-secondary"
|
||||
onMouseDown={() => enableDecrease(true)}
|
||||
onMouseUp={() => enableDecrease(false)}
|
||||
aria-label="Decrease"
|
||||
>
|
||||
<i className="fas fa-minus" />
|
||||
</button>
|
||||
</div>
|
||||
</Input>
|
||||
);
|
||||
}
|
||||
|
||||
export default NumberInput;
|
||||
|
@ -1,17 +1,14 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useState } from "react";
|
||||
|
||||
import { faEye, faEyeSlash } from "@fortawesome/free-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import Input from "./Input";
|
||||
import { Input } from "./Input";
|
||||
|
||||
PasswordInput.propTypes = {
|
||||
/** Field label. */
|
||||
@ -28,7 +25,7 @@ PasswordInput.propTypes = {
|
||||
newPass: PropTypes.bool,
|
||||
};
|
||||
|
||||
function PasswordInput({ withEye, newPass, ...props }) {
|
||||
export function PasswordInput({ withEye, newPass, ...props }) {
|
||||
const [isHidden, setHidden] = useState(true);
|
||||
|
||||
return (
|
||||
@ -37,24 +34,24 @@ function PasswordInput({ withEye, newPass, ...props }) {
|
||||
autoComplete={newPass ? "new-password" : "current-password"}
|
||||
{...props}
|
||||
>
|
||||
{withEye && (
|
||||
<button
|
||||
type="button"
|
||||
className="input-group-text"
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
setHidden((shouldBeHidden) => !shouldBeHidden);
|
||||
}}
|
||||
>
|
||||
<FontAwesomeIcon
|
||||
icon={isHidden ? faEye : faEyeSlash}
|
||||
style={{ width: "1.25rem" }}
|
||||
className="text-secondary"
|
||||
/>
|
||||
</button>
|
||||
)}
|
||||
{withEye ? (
|
||||
<div className="input-group-append">
|
||||
<button
|
||||
type="button"
|
||||
className="input-group-text"
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
setHidden((shouldBeHidden) => !shouldBeHidden);
|
||||
}}
|
||||
>
|
||||
<i
|
||||
className={`fa ${
|
||||
isHidden ? "fa-eye" : "fa-eye-slash"
|
||||
}`}
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
) : null}
|
||||
</Input>
|
||||
);
|
||||
}
|
||||
|
||||
export default PasswordInput;
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
import { useUID } from "react-uid";
|
||||
|
||||
@ -18,7 +17,7 @@ RadioSet.propTypes = {
|
||||
/** Choices . */
|
||||
choices: PropTypes.arrayOf(
|
||||
PropTypes.shape({
|
||||
/** Choice label . */
|
||||
/** Choice lable . */
|
||||
label: PropTypes.oneOfType([
|
||||
PropTypes.string,
|
||||
PropTypes.element,
|
||||
@ -37,7 +36,15 @@ RadioSet.propTypes = {
|
||||
inline: PropTypes.bool,
|
||||
};
|
||||
|
||||
function RadioSet({ name, label, choices, value, helpText, inline, ...props }) {
|
||||
export function RadioSet({
|
||||
name,
|
||||
label,
|
||||
choices,
|
||||
value,
|
||||
helpText,
|
||||
inline,
|
||||
...props
|
||||
}) {
|
||||
const uid = useUID();
|
||||
const radios = choices.map((choice, key) => {
|
||||
const id = `${name}-${key}`;
|
||||
@ -57,7 +64,7 @@ function RadioSet({ name, label, choices, value, helpText, inline, ...props }) {
|
||||
});
|
||||
|
||||
return (
|
||||
<div className="mb-3">
|
||||
<div className="form-group">
|
||||
{label && (
|
||||
<label htmlFor={uid} className="d-block">
|
||||
{label}
|
||||
@ -65,9 +72,7 @@ function RadioSet({ name, label, choices, value, helpText, inline, ...props }) {
|
||||
)}
|
||||
{radios}
|
||||
{helpText && (
|
||||
<div className="form-text">
|
||||
<small>{helpText}</small>
|
||||
</div>
|
||||
<small className="form-text text-muted">{helpText}</small>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
@ -83,30 +88,31 @@ Radio.propTypes = {
|
||||
id: PropTypes.string.isRequired,
|
||||
inline: PropTypes.bool,
|
||||
helpText: PropTypes.string,
|
||||
className: PropTypes.string,
|
||||
};
|
||||
|
||||
export function Radio({ label, id, helpText, inline, className, ...props }) {
|
||||
export function Radio({ label, id, helpText, inline, ...props }) {
|
||||
return (
|
||||
<div
|
||||
className={`${className || "mb-3"} ${inline ? "form-check form-check-inline" : ""}`.trim()}
|
||||
>
|
||||
<input
|
||||
id={id}
|
||||
className="form-check-input me-2"
|
||||
type="radio"
|
||||
{...props}
|
||||
/>
|
||||
<label className="form-check-label" htmlFor={id}>
|
||||
{label}
|
||||
<>
|
||||
<div
|
||||
className={`custom-control custom-radio ${
|
||||
inline ? "custom-control-inline" : ""
|
||||
}`.trim()}
|
||||
>
|
||||
<input
|
||||
id={id}
|
||||
className="custom-control-input"
|
||||
type="radio"
|
||||
{...props}
|
||||
/>
|
||||
<label className="custom-control-label" htmlFor={id}>
|
||||
{label}
|
||||
</label>
|
||||
{helpText && (
|
||||
<div className="form-text">
|
||||
<small>{helpText}</small>
|
||||
</div>
|
||||
<small className="form-text text-muted mt-0 mb-3">
|
||||
{helpText}
|
||||
</small>
|
||||
)}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default RadioSet;
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
import { useUID } from "react-uid";
|
||||
|
||||
@ -21,7 +20,7 @@ Select.propTypes = {
|
||||
helpText: PropTypes.string,
|
||||
};
|
||||
|
||||
function Select({ label, choices, helpText, ...props }) {
|
||||
export function Select({ label, choices, helpText, ...props }) {
|
||||
const uid = useUID();
|
||||
|
||||
const options = Object.keys(choices).map((choice) => (
|
||||
@ -31,20 +30,14 @@ function Select({ label, choices, helpText, ...props }) {
|
||||
));
|
||||
|
||||
return (
|
||||
<div className="mb-3">
|
||||
<label className="form-label" htmlFor={uid}>
|
||||
{label}
|
||||
</label>
|
||||
<select className="form-select" id={uid} {...props}>
|
||||
<div className="form-group">
|
||||
<label htmlFor={uid}>{label}</label>
|
||||
<select className="custom-select" id={uid} {...props}>
|
||||
{options}
|
||||
</select>
|
||||
{helpText && (
|
||||
<div className="form-text">
|
||||
<small>{helpText}</small>
|
||||
</div>
|
||||
)}
|
||||
{helpText ? (
|
||||
<small className="form-text text-muted">{helpText}</small>
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Select;
|
||||
|
@ -1,11 +1,3 @@
|
||||
.spinner-fs-wrapper {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 1101; /* increase z-index by 1 to ensure it's on top of spinner-fs-background */
|
||||
}
|
||||
|
||||
.spinner-wrapper .spinner-border {
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
@ -15,8 +7,10 @@
|
||||
.spinner-fs-background {
|
||||
background-color: rgba(2, 2, 2, 0.5);
|
||||
color: rgb(230, 230, 230);
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@ -37,7 +31,3 @@
|
||||
.spinner-fs-wrapper .spinner-text {
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
.spinner-border-sm {
|
||||
min-width: 16px;
|
||||
}
|
||||
|
@ -6,7 +6,6 @@
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import "./Spinner.css";
|
||||
@ -17,7 +16,7 @@ Spinner.propTypes = {
|
||||
PropTypes.arrayOf(PropTypes.node),
|
||||
PropTypes.node,
|
||||
]),
|
||||
/** Render component with full-screen mode (using appropriate `.css` styles) */
|
||||
/** Render component with full-screen mode (using apropriate `.css` styles) */
|
||||
fullScreen: PropTypes.bool.isRequired,
|
||||
className: PropTypes.string,
|
||||
};
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (c) 2020-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (c) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
import { useUID } from "react-uid";
|
||||
|
||||
@ -19,35 +18,32 @@ Switch.propTypes = {
|
||||
]).isRequired,
|
||||
helpText: PropTypes.string,
|
||||
switchHeading: PropTypes.bool,
|
||||
className: PropTypes.string,
|
||||
};
|
||||
|
||||
function Switch({ label, helpText, switchHeading, className, ...props }) {
|
||||
export function Switch({ label, helpText, switchHeading, ...props }) {
|
||||
const uid = useUID();
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`form-check form-switch ${className || "mb-3"} ${
|
||||
switchHeading ? "d-flex align-items-center" : ""
|
||||
}`.trim()}
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
className={`form-check-input ${switchHeading ? "me-2" : ""}`.trim()}
|
||||
role="switch"
|
||||
id={uid}
|
||||
{...props}
|
||||
/>
|
||||
<label className="form-check-label" htmlFor={uid}>
|
||||
{label}
|
||||
</label>
|
||||
{helpText && (
|
||||
<div className="form-text">
|
||||
<small>{helpText}</small>
|
||||
</div>
|
||||
)}
|
||||
<div className={`form-group ${switchHeading ? "switch" : ""}`.trim()}>
|
||||
<div
|
||||
className={`custom-control custom-switch ${
|
||||
!helpText ? "custom-control-inline" : ""
|
||||
} ${switchHeading ? "switch-heading" : ""}`.trim()}
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
className="custom-control-input"
|
||||
id={uid}
|
||||
{...props}
|
||||
/>
|
||||
<label className="custom-control-label" htmlFor={uid}>
|
||||
{label}
|
||||
</label>
|
||||
{helpText && (
|
||||
<small className="form-text text-muted mt-0 mb-3">
|
||||
{helpText}
|
||||
</small>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Switch;
|
||||
|
@ -1,19 +1,16 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import Input from "./Input";
|
||||
import { Input } from "./Input";
|
||||
|
||||
function TextInput({ ...props }) {
|
||||
return <Input type="text" {...props} />;
|
||||
}
|
||||
export const TextInput = ({ ...props }) => <Input type="text" {...props} />;
|
||||
|
||||
TextInput.propTypes = {
|
||||
/** Field label. */
|
||||
@ -23,5 +20,3 @@ TextInput.propTypes = {
|
||||
/** Help text message. */
|
||||
helpText: PropTypes.string,
|
||||
};
|
||||
|
||||
export default TextInput;
|
||||
|
@ -9,7 +9,7 @@ import React from "react";
|
||||
|
||||
import { render } from "customTestRender";
|
||||
|
||||
import Button from "../Button";
|
||||
import { Button } from "../Button";
|
||||
|
||||
describe("<Button />", () => {
|
||||
it("Render button correctly", () => {
|
||||
|
@ -9,7 +9,7 @@ import React from "react";
|
||||
|
||||
import { render } from "customTestRender";
|
||||
|
||||
import CheckBox from "../CheckBox";
|
||||
import { CheckBox } from "../CheckBox";
|
||||
|
||||
describe("<Checkbox/>", () => {
|
||||
it("Render checkbox", () => {
|
||||
|
@ -9,7 +9,7 @@ import React from "react";
|
||||
|
||||
import { render } from "customTestRender";
|
||||
|
||||
import DownloadButton from "../DownloadButton";
|
||||
import { DownloadButton } from "../DownloadButton";
|
||||
|
||||
describe("<DownloadButton />", () => {
|
||||
it("should have download attribute", () => {
|
||||
|
@ -9,7 +9,7 @@ import React from "react";
|
||||
|
||||
import { render, fireEvent, getByLabelText, wait } from "customTestRender";
|
||||
|
||||
import NumberInput from "../NumberInput";
|
||||
import { NumberInput } from "../NumberInput";
|
||||
|
||||
describe("<NumberInput/>", () => {
|
||||
const onChangeMock = jest.fn();
|
||||
|
@ -9,7 +9,7 @@ import React from "react";
|
||||
|
||||
import { render } from "customTestRender";
|
||||
|
||||
import PasswordInput from "../PasswordInput";
|
||||
import { PasswordInput } from "../PasswordInput";
|
||||
|
||||
describe("<PasswordInput/>", () => {
|
||||
it("Render password input", () => {
|
||||
|
@ -9,7 +9,7 @@ import React from "react";
|
||||
|
||||
import { render } from "customTestRender";
|
||||
|
||||
import RadioSet from "../RadioSet";
|
||||
import { RadioSet } from "../RadioSet";
|
||||
|
||||
const TEST_CHOICES = [
|
||||
{
|
||||
|
@ -14,7 +14,7 @@ import {
|
||||
render,
|
||||
} from "customTestRender";
|
||||
|
||||
import Select from "../Select";
|
||||
import { Select } from "../Select";
|
||||
|
||||
const TEST_CHOICES = {
|
||||
1: "one",
|
||||
|
@ -9,7 +9,7 @@ import React from "react";
|
||||
|
||||
import { render } from "customTestRender";
|
||||
|
||||
import Switch from "../Switch";
|
||||
import { Switch } from "../Switch";
|
||||
|
||||
describe("<Switch/>", () => {
|
||||
it("Render switch", () => {
|
||||
|
@ -9,7 +9,7 @@ import React from "react";
|
||||
|
||||
import { render } from "customTestRender";
|
||||
|
||||
import TextInput from "../TextInput";
|
||||
import { TextInput } from "../TextInput";
|
||||
|
||||
describe("<TextInput/>", () => {
|
||||
it("Render text input", () => {
|
||||
|
@ -2,38 +2,33 @@
|
||||
|
||||
exports[`<Button /> Render button correctly 1`] = `
|
||||
<button
|
||||
class="btn btn-primary d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-primary "
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
Test Button
|
||||
</span>
|
||||
Test Button
|
||||
</button>
|
||||
`;
|
||||
|
||||
exports[`<Button /> Render button with custom classes 1`] = `
|
||||
<button
|
||||
class="btn one two three d-inline-flex justify-content-center align-items-center"
|
||||
class="btn one two three"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
Test Button
|
||||
</span>
|
||||
Test Button
|
||||
</button>
|
||||
`;
|
||||
|
||||
exports[`<Button /> Render button with spinner 1`] = `
|
||||
<button
|
||||
class="btn btn-primary d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-primary "
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="spinner-border spinner-border-sm me-1"
|
||||
class="spinner-border spinner-border-sm"
|
||||
role="status"
|
||||
/>
|
||||
<span>
|
||||
Test Button
|
||||
</span>
|
||||
|
||||
Test Button
|
||||
</button>
|
||||
`;
|
||||
|
@ -2,51 +2,55 @@
|
||||
|
||||
exports[`<Checkbox/> Render checkbox 1`] = `
|
||||
<div
|
||||
class="mb-3 form-check"
|
||||
class="form-group"
|
||||
>
|
||||
<input
|
||||
checked=""
|
||||
class="form-check-input"
|
||||
id="1"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label
|
||||
class="form-check-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
</label>
|
||||
<div
|
||||
class="form-text"
|
||||
class="custom-control custom-checkbox "
|
||||
>
|
||||
<small>
|
||||
Some help text
|
||||
</small>
|
||||
<input
|
||||
checked=""
|
||||
class="custom-control-input"
|
||||
id="1"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label
|
||||
class="custom-control-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
Some help text
|
||||
</small>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`<Checkbox/> Render uncheked checkbox 1`] = `
|
||||
<div
|
||||
class="mb-3 form-check"
|
||||
class="form-group"
|
||||
>
|
||||
<input
|
||||
class="form-check-input"
|
||||
id="1"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label
|
||||
class="form-check-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
</label>
|
||||
<div
|
||||
class="form-text"
|
||||
class="custom-control custom-checkbox "
|
||||
>
|
||||
<small>
|
||||
Some help text
|
||||
</small>
|
||||
<input
|
||||
class="custom-control-input"
|
||||
id="1"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label
|
||||
class="custom-control-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
Some help text
|
||||
</small>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
@ -2,10 +2,9 @@
|
||||
|
||||
exports[`<NumberInput/> Render number input 1`] = `
|
||||
<div
|
||||
class="mb-3"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
class="form-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
@ -19,31 +18,33 @@ exports[`<NumberInput/> Render number input 1`] = `
|
||||
type="number"
|
||||
value="1"
|
||||
/>
|
||||
<button
|
||||
aria-label="Increase"
|
||||
class="btn btn-outline-secondary"
|
||||
type="button"
|
||||
<div
|
||||
class="input-group-append"
|
||||
>
|
||||
<i
|
||||
class="fa"
|
||||
/>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Decrease"
|
||||
class="btn btn-outline-secondary"
|
||||
type="button"
|
||||
>
|
||||
<i
|
||||
class="fa"
|
||||
/>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Increase"
|
||||
class="btn btn-outline-secondary"
|
||||
type="button"
|
||||
>
|
||||
<i
|
||||
class="fas fa-plus"
|
||||
/>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Decrease"
|
||||
class="btn btn-outline-secondary"
|
||||
type="button"
|
||||
>
|
||||
<i
|
||||
class="fas fa-minus"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="form-text"
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
<small>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
`;
|
||||
|
@ -2,10 +2,9 @@
|
||||
|
||||
exports[`<PasswordInput/> Render password input 1`] = `
|
||||
<div
|
||||
class="mb-3"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
class="form-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
@ -21,12 +20,10 @@ exports[`<PasswordInput/> Render password input 1`] = `
|
||||
value="Some password"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="form-text"
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
<small>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
`;
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
exports[`<RadioSet/> Render radio set 1`] = `
|
||||
<div
|
||||
class="mb-3"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
class="d-block"
|
||||
@ -11,63 +11,61 @@ exports[`<RadioSet/> Render radio set 1`] = `
|
||||
Radios set label
|
||||
</label>
|
||||
<div
|
||||
class="mb-3"
|
||||
class="custom-control custom-radio"
|
||||
>
|
||||
<input
|
||||
checked=""
|
||||
class="form-check-input me-2"
|
||||
class="custom-control-input"
|
||||
id="test_name-0"
|
||||
name="test_name"
|
||||
type="radio"
|
||||
value="value"
|
||||
/>
|
||||
<label
|
||||
class="form-check-label"
|
||||
class="custom-control-label"
|
||||
for="test_name-0"
|
||||
>
|
||||
label
|
||||
</label>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
class="custom-control custom-radio"
|
||||
>
|
||||
<input
|
||||
class="form-check-input me-2"
|
||||
class="custom-control-input"
|
||||
id="test_name-1"
|
||||
name="test_name"
|
||||
type="radio"
|
||||
value="another value"
|
||||
/>
|
||||
<label
|
||||
class="form-check-label"
|
||||
class="custom-control-label"
|
||||
for="test_name-1"
|
||||
>
|
||||
another label
|
||||
</label>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
class="custom-control custom-radio"
|
||||
>
|
||||
<input
|
||||
class="form-check-input me-2"
|
||||
class="custom-control-input"
|
||||
id="test_name-2"
|
||||
name="test_name"
|
||||
type="radio"
|
||||
value="another on value"
|
||||
/>
|
||||
<label
|
||||
class="form-check-label"
|
||||
class="custom-control-label"
|
||||
for="test_name-2"
|
||||
>
|
||||
another one label
|
||||
</label>
|
||||
</div>
|
||||
<div
|
||||
class="form-text"
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
<small>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
`;
|
||||
|
@ -3,16 +3,15 @@
|
||||
exports[`<Select/> Test with snapshot. 1`] = `
|
||||
<div>
|
||||
<div
|
||||
class="mb-3"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
class="form-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
</label>
|
||||
<select
|
||||
class="form-select"
|
||||
class="custom-select"
|
||||
id="1"
|
||||
>
|
||||
<option
|
||||
@ -31,13 +30,11 @@ exports[`<Select/> Test with snapshot. 1`] = `
|
||||
three
|
||||
</option>
|
||||
</select>
|
||||
<div
|
||||
class="form-text"
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
<small>
|
||||
Help text
|
||||
</small>
|
||||
</div>
|
||||
Help text
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
@ -2,25 +2,26 @@
|
||||
|
||||
exports[`<Switch/> Render switch 1`] = `
|
||||
<div
|
||||
class="form-check form-switch mb-3"
|
||||
class="form-group"
|
||||
>
|
||||
<input
|
||||
checked=""
|
||||
class="form-check-input"
|
||||
id="1"
|
||||
role="switch"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label
|
||||
class="form-check-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
</label>
|
||||
<div
|
||||
class="form-text"
|
||||
class="custom-control custom-switch"
|
||||
>
|
||||
<small>
|
||||
<input
|
||||
checked=""
|
||||
class="custom-control-input"
|
||||
id="1"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label
|
||||
class="custom-control-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
</label>
|
||||
<small
|
||||
class="form-text text-muted mt-0 mb-3"
|
||||
>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
@ -29,24 +30,25 @@ exports[`<Switch/> Render switch 1`] = `
|
||||
|
||||
exports[`<Switch/> Render uncheked switch 1`] = `
|
||||
<div
|
||||
class="form-check form-switch mb-3"
|
||||
class="form-group"
|
||||
>
|
||||
<input
|
||||
class="form-check-input"
|
||||
id="1"
|
||||
role="switch"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label
|
||||
class="form-check-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
</label>
|
||||
<div
|
||||
class="form-text"
|
||||
class="custom-control custom-switch"
|
||||
>
|
||||
<small>
|
||||
<input
|
||||
class="custom-control-input"
|
||||
id="1"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label
|
||||
class="custom-control-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
</label>
|
||||
<small
|
||||
class="form-text text-muted mt-0 mb-3"
|
||||
>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
|
@ -2,10 +2,9 @@
|
||||
|
||||
exports[`<TextInput/> Render text input 1`] = `
|
||||
<div
|
||||
class="mb-3"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
class="form-label"
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
@ -20,12 +19,10 @@ exports[`<TextInput/> Render text input 1`] = `
|
||||
value="Some text"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="form-text"
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
<small>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
`;
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
/** Bootstrap column size for form fields */
|
||||
const formFieldsSize = "card p-4 col-sm-12 col-lg-12 p-0 mb-4";
|
||||
const buttonFormFieldsSize = "col-sm-12 col-lg-12 p-0 mb-3";
|
||||
|
||||
export { formFieldsSize, buttonFormFieldsSize };
|
||||
// eslint-disable-next-line import/prefer-default-export
|
||||
export const formFieldsSize = "card p-4 col-sm-12 col-lg-12 p-0 mb-4";
|
||||
export const buttonFormFieldsSize = "col-sm-12 col-lg-12 p-0 mb-3";
|
||||
|
@ -1,22 +1,22 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useState, useEffect } from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { useAPIPost } from "../api/hooks";
|
||||
import { API_STATE } from "../api/utils";
|
||||
import Button from "../bootstrap/Button";
|
||||
import { Modal, ModalHeader, ModalBody, ModalFooter } from "../bootstrap/Modal";
|
||||
import { useAlert } from "../context/alertContext/AlertContext";
|
||||
import { ForisURLs } from "../utils/forisUrls";
|
||||
|
||||
function RebootButton(props) {
|
||||
import { Button } from "../bootstrap/Button";
|
||||
import { Modal, ModalHeader, ModalBody, ModalFooter } from "../bootstrap/Modal";
|
||||
import { useAlert } from "../alertContext/AlertContext";
|
||||
|
||||
export function RebootButton(props) {
|
||||
const [triggered, setTriggered] = useState(false);
|
||||
const [modalShown, setModalShown] = useState(false);
|
||||
const [triggerRebootStatus, triggerReboot] = useAPIPost(ForisURLs.reboot);
|
||||
@ -28,11 +28,11 @@ function RebootButton(props) {
|
||||
}
|
||||
});
|
||||
|
||||
const rebootHandler = () => {
|
||||
function rebootHandler() {
|
||||
setTriggered(true);
|
||||
triggerReboot();
|
||||
setModalShown(false);
|
||||
};
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
@ -76,5 +76,3 @@ function RebootModal({ shown, setShown, onReboot }) {
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
|
||||
export default RebootButton;
|
||||
|
@ -1,27 +1,26 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useEffect, useState } from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { Button } from "../../bootstrap/Button";
|
||||
import { useAlert } from "../../alertContext/AlertContext";
|
||||
import { ALERT_TYPES } from "../../bootstrap/Alert";
|
||||
import { useAPIPost } from "../../api/hooks";
|
||||
import { API_STATE } from "../../api/utils";
|
||||
import { ALERT_TYPES } from "../../bootstrap/Alert";
|
||||
import Button from "../../bootstrap/Button";
|
||||
import { formFieldsSize } from "../../bootstrap/constants";
|
||||
import { useAlert } from "../../context/alertContext/AlertContext";
|
||||
|
||||
ResetWiFiSettings.propTypes = {
|
||||
ws: PropTypes.object.isRequired,
|
||||
endpoint: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
function ResetWiFiSettings({ ws, endpoint }) {
|
||||
export function ResetWiFiSettings({ ws, endpoint }) {
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
@ -45,11 +44,11 @@ function ResetWiFiSettings({ ws, endpoint }) {
|
||||
}
|
||||
}, [postResetResponse, setAlert]);
|
||||
|
||||
const onReset = () => {
|
||||
function onReset() {
|
||||
dismissAlert();
|
||||
setIsLoading(true);
|
||||
postReset();
|
||||
};
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={formFieldsSize}>
|
||||
@ -59,7 +58,7 @@ function ResetWiFiSettings({ ws, endpoint }) {
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-Fi settings. Note that this will remove the current Wi-Fi configuration and restore the default values."
|
||||
)}
|
||||
</p>
|
||||
<div className="text-end">
|
||||
<div className="text-right">
|
||||
<Button
|
||||
className="btn-primary"
|
||||
forisFormSize
|
||||
@ -73,5 +72,3 @@ function ResetWiFiSettings({ ws, endpoint }) {
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default ResetWiFiSettings;
|
||||
|
@ -1,22 +1,21 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { HELP_TEXTS, HTMODES, HWMODES, ENCRYPTIONMODES } from "./constants";
|
||||
import WifiGuestForm from "./WiFiGuestForm";
|
||||
import { Switch } from "../../bootstrap/Switch";
|
||||
import { CheckBox } from "../../bootstrap/CheckBox";
|
||||
import { PasswordInput } from "../../bootstrap/PasswordInput";
|
||||
import { RadioSet } from "../../bootstrap/RadioSet";
|
||||
import { Select } from "../../bootstrap/Select";
|
||||
import { TextInput } from "../../bootstrap/TextInput";
|
||||
import WiFiQRCode from "./WiFiQRCode";
|
||||
import PasswordInput from "../../bootstrap/PasswordInput";
|
||||
import RadioSet from "../../bootstrap/RadioSet";
|
||||
import Select from "../../bootstrap/Select";
|
||||
import Switch from "../../bootstrap/Switch";
|
||||
import TextInput from "../../bootstrap/TextInput";
|
||||
import WifiGuestForm from "./WiFiGuestForm";
|
||||
import { HELP_TEXTS, HTMODES, HWMODES, ENCRYPTIONMODES } from "./constants";
|
||||
|
||||
WiFiForm.propTypes = {
|
||||
formData: PropTypes.shape({ devices: PropTypes.arrayOf(PropTypes.object) })
|
||||
@ -66,7 +65,6 @@ DeviceForm.propTypes = {
|
||||
guest_wifi: PropTypes.object.isRequired,
|
||||
encryption: PropTypes.string.isRequired,
|
||||
available_bands: PropTypes.array.isRequired,
|
||||
ieee80211w_disabled: PropTypes.bool,
|
||||
}),
|
||||
formErrors: PropTypes.object.isRequired,
|
||||
setFormValue: PropTypes.func.isRequired,
|
||||
@ -94,7 +92,7 @@ function DeviceForm({
|
||||
return (
|
||||
<>
|
||||
<Switch
|
||||
label={<h2 className="mb-0">{_(`Wi-Fi ${deviceID + 1}`)}</h2>}
|
||||
label={<h2>{_(`Wi-Fi ${deviceID + 1}`)}</h2>}
|
||||
checked={formData.enabled}
|
||||
onChange={setFormValue((value) => ({
|
||||
devices: {
|
||||
@ -104,7 +102,7 @@ function DeviceForm({
|
||||
switchHeading
|
||||
{...props}
|
||||
/>
|
||||
{formData.enabled && (
|
||||
{formData.enabled ? (
|
||||
<>
|
||||
<TextInput
|
||||
label="SSID"
|
||||
@ -121,10 +119,12 @@ function DeviceForm({
|
||||
}))}
|
||||
{...props}
|
||||
>
|
||||
<WiFiQRCode
|
||||
SSID={formData.SSID}
|
||||
password={formData.password}
|
||||
/>
|
||||
<div className="input-group-append">
|
||||
<WiFiQRCode
|
||||
SSID={formData.SSID}
|
||||
password={formData.password}
|
||||
/>
|
||||
</div>
|
||||
</TextInput>
|
||||
|
||||
<PasswordInput
|
||||
@ -142,7 +142,7 @@ function DeviceForm({
|
||||
{...props}
|
||||
/>
|
||||
|
||||
<Switch
|
||||
<CheckBox
|
||||
label={_("Hide SSID")}
|
||||
helpText={HELP_TEXTS.hidden}
|
||||
checked={formData.hidden}
|
||||
@ -183,7 +183,7 @@ function DeviceForm({
|
||||
/>
|
||||
|
||||
<Select
|
||||
label={_("802.11n/ac/ax mode")}
|
||||
label={_("802.11n/ac mode")}
|
||||
choices={getHtmodeChoices(formData)}
|
||||
value={formData.htmode}
|
||||
helpText={HELP_TEXTS.htmode}
|
||||
@ -220,25 +220,6 @@ function DeviceForm({
|
||||
{...props}
|
||||
/>
|
||||
|
||||
{(formData.encryption === "WPA3" ||
|
||||
formData.encryption === "WPA2/3") && (
|
||||
<Switch
|
||||
label={_("Disable Management Frame Protection")}
|
||||
helpText={_(
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling Management Frame Protection."
|
||||
)}
|
||||
checked={formData.ieee80211w_disabled}
|
||||
onChange={setFormValue((value) => ({
|
||||
devices: {
|
||||
[deviceIndex]: {
|
||||
ieee80211w_disabled: { $set: value },
|
||||
},
|
||||
},
|
||||
}))}
|
||||
{...props}
|
||||
/>
|
||||
)}
|
||||
|
||||
{hasGuestNetwork && (
|
||||
<WifiGuestForm
|
||||
formData={{
|
||||
@ -251,8 +232,8 @@ function DeviceForm({
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
{divider && <hr />}
|
||||
) : null}
|
||||
{divider ? <hr /> : null}
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -269,8 +250,8 @@ function getChannelChoices(device) {
|
||||
channelChoices[availableChannel.number.toString()] = `
|
||||
${availableChannel.number}
|
||||
(${availableChannel.frequency} MHz ${
|
||||
availableChannel.radar ? " ,DFS" : ""
|
||||
})
|
||||
availableChannel.radar ? " ,DFS" : ""
|
||||
})
|
||||
`;
|
||||
});
|
||||
});
|
||||
|
@ -1,19 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { HELP_TEXTS } from "./constants";
|
||||
import { TextInput } from "../../bootstrap/TextInput";
|
||||
import { Switch } from "../../bootstrap/Switch";
|
||||
import { PasswordInput } from "../../bootstrap/PasswordInput";
|
||||
import WiFiQRCode from "./WiFiQRCode";
|
||||
import PasswordInput from "../../bootstrap/PasswordInput";
|
||||
import Switch from "../../bootstrap/Switch";
|
||||
import TextInput from "../../bootstrap/TextInput";
|
||||
import { HELP_TEXTS } from "./constants";
|
||||
|
||||
WifiGuestForm.propTypes = {
|
||||
formData: PropTypes.shape({
|
||||
@ -68,11 +67,14 @@ export default function WifiGuestForm({
|
||||
}))}
|
||||
{...props}
|
||||
>
|
||||
<WiFiQRCode
|
||||
SSID={formData.SSID}
|
||||
password={formData.password}
|
||||
/>
|
||||
<div className="input-group-append">
|
||||
<WiFiQRCode
|
||||
SSID={formData.SSID}
|
||||
password={formData.password}
|
||||
/>
|
||||
</div>
|
||||
</TextInput>
|
||||
|
||||
<PasswordInput
|
||||
withEye
|
||||
label={_("Password")}
|
||||
|
@ -1,30 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useState } from "react";
|
||||
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import PropTypes from "prop-types";
|
||||
import QRCode from "qrcode.react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { createAndDownloadPdf, toQRCodeContent } from "./qrCodeHelpers";
|
||||
import Button from "../../bootstrap/Button";
|
||||
import { ForisURLs } from "../../utils/forisUrls";
|
||||
import { Button } from "../../bootstrap/Button";
|
||||
import {
|
||||
Modal,
|
||||
ModalBody,
|
||||
ModalFooter,
|
||||
ModalHeader,
|
||||
} from "../../bootstrap/Modal";
|
||||
import { createAndDownloadPdf, toQRCodeContent } from "./qrCodeHelpers";
|
||||
|
||||
WiFiQRCode.propTypes = {
|
||||
SSID: PropTypes.string.isRequired,
|
||||
password: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
const QR_ICON_PATH = `${ForisURLs.static}/imgs/QR_icon.svg`;
|
||||
|
||||
export default function WiFiQRCode({ SSID, password }) {
|
||||
const [modal, setModal] = useState(false);
|
||||
|
||||
@ -38,11 +39,11 @@ export default function WiFiQRCode({ SSID, password }) {
|
||||
setModal(true);
|
||||
}}
|
||||
>
|
||||
<FontAwesomeIcon
|
||||
icon="fa-solid fa-qrcode"
|
||||
title={_("Show QR code")}
|
||||
aria-label={_("Show QR code")}
|
||||
className="text-secondary"
|
||||
<img
|
||||
width="20"
|
||||
src={QR_ICON_PATH}
|
||||
alt="QR"
|
||||
style={{ opacity: 0.67 }}
|
||||
/>
|
||||
</button>
|
||||
{modal ? (
|
||||
@ -70,35 +71,23 @@ function QRCodeModal({ shown, setShown, SSID, password }) {
|
||||
<ModalHeader setShown={setShown} title={_("Wi-Fi QR Code")} />
|
||||
<ModalBody>
|
||||
<QRCode
|
||||
className="d-block mx-auto img-logo-black"
|
||||
renderAs="svg"
|
||||
value={toQRCodeContent(SSID, password)}
|
||||
level="M"
|
||||
size={350}
|
||||
includeMargin
|
||||
style={{ display: "block", margin: "auto" }}
|
||||
/>
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button
|
||||
className="btn-secondary"
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
setShown(false);
|
||||
}}
|
||||
>
|
||||
{_("Close")}
|
||||
</Button>
|
||||
<Button
|
||||
className="btn-primary"
|
||||
className="btn-outline-primary"
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
createAndDownloadPdf(SSID, password);
|
||||
}}
|
||||
>
|
||||
<FontAwesomeIcon
|
||||
icon="fa-solid fa-file-download"
|
||||
className="me-2"
|
||||
/>
|
||||
<i className="fas fa-arrow-down mr-2" />
|
||||
{_("Download PDF")}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
|
@ -1,17 +1,16 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import ResetWiFiSettings from "./ResetWiFiSettings";
|
||||
import { ForisForm } from "../../form/components/ForisForm";
|
||||
import WiFiForm from "./WiFiForm";
|
||||
import ForisForm from "../../form/components/ForisForm";
|
||||
import { ResetWiFiSettings } from "./ResetWiFiSettings";
|
||||
|
||||
WiFiSettings.propTypes = {
|
||||
ws: PropTypes.object.isRequired,
|
||||
@ -20,7 +19,7 @@ WiFiSettings.propTypes = {
|
||||
hasGuestNetwork: PropTypes.bool,
|
||||
};
|
||||
|
||||
function WiFiSettings({ ws, endpoint, resetEndpoint, hasGuestNetwork }) {
|
||||
export function WiFiSettings({ ws, endpoint, resetEndpoint, hasGuestNetwork }) {
|
||||
return (
|
||||
<>
|
||||
<ForisForm
|
||||
@ -60,10 +59,6 @@ function prepDataToSubmit(formData) {
|
||||
|
||||
if (!device.guest_wifi.enabled)
|
||||
formData.devices[idx].guest_wifi = { enabled: false };
|
||||
|
||||
if (device.encryption === "WPA2") {
|
||||
delete formData.devices[idx].ieee80211w_disabled;
|
||||
}
|
||||
});
|
||||
return formData;
|
||||
}
|
||||
@ -118,5 +113,3 @@ export function validator(formData) {
|
||||
});
|
||||
return JSON.stringify(formErrors).match(/\[[{},?]+\]/) ? null : formErrors;
|
||||
}
|
||||
|
||||
export default WiFiSettings;
|
||||
|
@ -9,12 +9,12 @@ import React from "react";
|
||||
import { render, fireEvent, wait } from "customTestRender";
|
||||
|
||||
import mockAxios from "jest-mock-axios";
|
||||
import WebSockets from "webSockets/WebSockets";
|
||||
import { WebSockets } from "webSockets/WebSockets";
|
||||
import { mockJSONError } from "testUtils/network";
|
||||
import { mockSetAlert } from "testUtils/alertContextMock";
|
||||
import { ALERT_TYPES } from "../../../bootstrap/Alert";
|
||||
|
||||
import ResetWiFiSettings from "../ResetWiFiSettings";
|
||||
import { ResetWiFiSettings } from "../ResetWiFiSettings";
|
||||
|
||||
describe("<ResetWiFiSettings/>", () => {
|
||||
const webSockets = new WebSockets();
|
||||
|
@ -10,7 +10,7 @@ import diffSnapshot from "snapshot-diff";
|
||||
import mockAxios from "jest-mock-axios";
|
||||
|
||||
import { fireEvent, render, wait } from "customTestRender";
|
||||
import WebSockets from "webSockets/WebSockets";
|
||||
import { WebSockets } from "webSockets/WebSockets";
|
||||
import { mockJSONError } from "testUtils/network";
|
||||
|
||||
import {
|
||||
@ -19,7 +19,7 @@ import {
|
||||
twoDevices,
|
||||
threeDevices,
|
||||
} from "./__fixtures__/wifiSettings";
|
||||
import WiFiSettings, { validator, byteCount } from "../WiFiSettings";
|
||||
import { WiFiSettings, validator, byteCount } from "../WiFiSettings";
|
||||
|
||||
describe("<WiFiSettings/>", () => {
|
||||
let firstRender;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -32,7 +32,7 @@ export const HELP_TEXTS = {
|
||||
"SSID which contains non-standard characters could cause problems on some devices."
|
||||
),
|
||||
password: _(
|
||||
"WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
"WPA2 pre-shared key, that is required to connect to the network."
|
||||
),
|
||||
hidden: _(
|
||||
"If set, network is not visible when scanning for available networks."
|
||||
@ -41,7 +41,7 @@ export const HELP_TEXTS = {
|
||||
"The 2.4 GHz band is more widely supported by clients, but tends to have more interference. The 5 GHz band is a newer standard and may not be supported by all your devices. It usually has less interference, but the signal does not carry so well indoors."
|
||||
),
|
||||
htmode: _(
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 MHz wide channels can yield higher throughput but can cause more interference in the network. If you don't know what to choose, use the default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz wide channels can yield higher throughput but can cause more interference in the network. If you don't know what to choose, use the default option with 20 MHz wide channel."
|
||||
),
|
||||
guest_wifi_enabled: _(
|
||||
"Enables Wi-Fi for guests, which is separated from LAN network. Devices connected to this network are allowed to access the internet, but aren't allowed to access other devices and the configuration interface of the router. Parameters of the guest network can be set in the Guest network tab."
|
||||
|
@ -18,7 +18,7 @@ import mockAxios from "jest-mock-axios";
|
||||
import { mockJSONError } from "testUtils/network";
|
||||
import { mockSetAlert } from "testUtils/alertContextMock";
|
||||
|
||||
import RebootButton from "../RebootButton";
|
||||
import { RebootButton } from "../RebootButton";
|
||||
|
||||
describe("<RebootButton/>", () => {
|
||||
let componentContainer;
|
||||
|
@ -25,10 +25,15 @@ exports[`<RebootButton/> Render modal. 1`] = `
|
||||
Warning!
|
||||
</h5>
|
||||
<button
|
||||
aria-label="Close"
|
||||
class="btn-close"
|
||||
class="close"
|
||||
type="button"
|
||||
/>
|
||||
>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
>
|
||||
×
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
class="modal-body"
|
||||
@ -41,20 +46,16 @@ exports[`<RebootButton/> Render modal. 1`] = `
|
||||
class="modal-footer"
|
||||
>
|
||||
<button
|
||||
class="btn btn-primary d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-primary "
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
Cancel
|
||||
</span>
|
||||
Cancel
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-danger d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-danger"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
Confirm reboot
|
||||
</span>
|
||||
Confirm reboot
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -62,12 +63,10 @@ exports[`<RebootButton/> Render modal. 1`] = `
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
class="btn btn-danger d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-danger"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
Reboot
|
||||
</span>
|
||||
Reboot
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
@ -78,12 +77,10 @@ exports[`<RebootButton/> Render. 1`] = `
|
||||
id="modal-container"
|
||||
/>
|
||||
<button
|
||||
class="btn btn-danger d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-danger"
|
||||
type="button"
|
||||
>
|
||||
<span>
|
||||
Reboot
|
||||
</span>
|
||||
Reboot
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
|
@ -1,68 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useContext, useEffect, useMemo } from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { useAPIGet } from "../../api/hooks";
|
||||
import { Spinner } from "../../bootstrap/Spinner";
|
||||
import { ForisURLs } from "../../utils/forisUrls";
|
||||
|
||||
CustomizationContextProvider.propTypes = {
|
||||
children: PropTypes.oneOfType([
|
||||
PropTypes.arrayOf(PropTypes.node),
|
||||
PropTypes.node,
|
||||
]),
|
||||
};
|
||||
|
||||
function CustomizationContextProvider({ children }) {
|
||||
const { CustomizationContext } = window;
|
||||
const [getCustomizationResponse, getCustomization] = useAPIGet(
|
||||
ForisURLs.about
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
getCustomization();
|
||||
}, [getCustomization]);
|
||||
|
||||
const deviceDetails = useMemo(
|
||||
() => getCustomizationResponse.data || {},
|
||||
[getCustomizationResponse.data]
|
||||
);
|
||||
|
||||
const isCustomized = useMemo(
|
||||
() =>
|
||||
!!(
|
||||
deviceDetails.customization !== undefined &&
|
||||
deviceDetails.customization === "shield"
|
||||
),
|
||||
[deviceDetails.customization]
|
||||
);
|
||||
|
||||
const contextValue = useMemo(
|
||||
() => ({ deviceDetails, isCustomized }),
|
||||
[deviceDetails, isCustomized]
|
||||
);
|
||||
|
||||
if (getCustomizationResponse.state !== "success") {
|
||||
return <Spinner fullScreen />;
|
||||
}
|
||||
|
||||
return (
|
||||
<CustomizationContext.Provider value={contextValue}>
|
||||
{children}
|
||||
</CustomizationContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
function useCustomizationContext() {
|
||||
const { CustomizationContext } = window;
|
||||
return useContext(CustomizationContext);
|
||||
}
|
||||
|
||||
export { CustomizationContextProvider, useCustomizationContext };
|
@ -1,3 +0,0 @@
|
||||
It provides customization context to the children. `CustomizationContext` allows
|
||||
using `useCustomizationContext` in components to check if the reForis UI is
|
||||
customized or not for specific devices.
|
@ -1,53 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import { render, wait, getByText } from "customTestRender";
|
||||
import mockAxios from "jest-mock-axios";
|
||||
|
||||
import {
|
||||
useCustomizationContext,
|
||||
CustomizationContextProvider,
|
||||
} from "../CustomizationContext";
|
||||
|
||||
const CUSTOM = "Description / component for customized reForis (Shield)";
|
||||
const ORIGINAL = "Description / component for original reForis (other devices)";
|
||||
|
||||
const CustomizationTest = () => {
|
||||
const { isCustomized } = useCustomizationContext();
|
||||
|
||||
return <p>{isCustomized ? CUSTOM : ORIGINAL}</p>;
|
||||
};
|
||||
|
||||
describe("CustomizationContext", () => {
|
||||
let componentContainer;
|
||||
beforeEach(() => {
|
||||
const { container } = render(
|
||||
<CustomizationContextProvider>
|
||||
<CustomizationTest />
|
||||
</CustomizationContextProvider>
|
||||
);
|
||||
componentContainer = container;
|
||||
});
|
||||
|
||||
it("should render component without customization", async () => {
|
||||
mockAxios.mockResponse({ data: {} });
|
||||
|
||||
await wait(() => getByText(componentContainer, ORIGINAL));
|
||||
|
||||
expect(componentContainer).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it("should render customized component", async () => {
|
||||
mockAxios.mockResponse({ data: { customization: "shield" } });
|
||||
|
||||
await wait(() => getByText(componentContainer, CUSTOM));
|
||||
|
||||
expect(componentContainer).toMatchSnapshot();
|
||||
});
|
||||
});
|
@ -1,17 +0,0 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`CustomizationContext should render component without customization 1`] = `
|
||||
<div>
|
||||
<p>
|
||||
Description / component for original reForis (other devices)
|
||||
</p>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`CustomizationContext should render customized component 1`] = `
|
||||
<div>
|
||||
<p>
|
||||
Description / component for customized reForis (Shield)
|
||||
</p>
|
||||
</div>
|
||||
`;
|
@ -3,18 +3,17 @@
|
||||
exports[`<SubmitButton/> Render load 1`] = `
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-primary col-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-primary col-sm-12 col-md-3 col-lg-2"
|
||||
disabled=""
|
||||
type="submit"
|
||||
>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="spinner-border spinner-border-sm me-1"
|
||||
class="spinner-border spinner-border-sm"
|
||||
role="status"
|
||||
/>
|
||||
<span>
|
||||
Load settings
|
||||
</span>
|
||||
|
||||
Load settings
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
@ -22,12 +21,10 @@ exports[`<SubmitButton/> Render load 1`] = `
|
||||
exports[`<SubmitButton/> Render ready 1`] = `
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-primary col-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-primary col-sm-12 col-md-3 col-lg-2"
|
||||
type="submit"
|
||||
>
|
||||
<span>
|
||||
Save
|
||||
</span>
|
||||
Save
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
@ -35,18 +32,17 @@ exports[`<SubmitButton/> Render ready 1`] = `
|
||||
exports[`<SubmitButton/> Render saving 1`] = `
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-primary col-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
|
||||
class="btn btn-primary col-sm-12 col-md-3 col-lg-2"
|
||||
disabled=""
|
||||
type="submit"
|
||||
>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="spinner-border spinner-border-sm me-1"
|
||||
class="spinner-border spinner-border-sm"
|
||||
role="status"
|
||||
/>
|
||||
<span>
|
||||
Updating
|
||||
</span>
|
||||
|
||||
Updating
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
|
@ -9,8 +9,8 @@ import React from "react";
|
||||
|
||||
import { act, fireEvent, render, waitForElement } from "customTestRender";
|
||||
import mockAxios from "jest-mock-axios";
|
||||
import WebSockets from "webSockets/WebSockets";
|
||||
import ForisForm from "../components/ForisForm";
|
||||
import { WebSockets } from "webSockets/WebSockets";
|
||||
import { ForisForm } from "../components/ForisForm";
|
||||
|
||||
// It's possible to unittest each hooks via react-hooks-testing-library.
|
||||
// But it's better and easier to test it by test components which uses this hooks.
|
||||
|
@ -1,24 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useEffect } from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
import { Prompt } from "react-router-dom";
|
||||
|
||||
import { STATES as SUBMIT_BUTTON_STATES, SubmitButton } from "./SubmitButton";
|
||||
import { useAPIPost } from "../../api/hooks";
|
||||
import { API_STATE } from "../../api/utils";
|
||||
import { ALERT_TYPES } from "../../bootstrap/Alert";
|
||||
import { API_STATE } from "../../api/utils";
|
||||
import { formFieldsSize } from "../../bootstrap/constants";
|
||||
import { Spinner } from "../../bootstrap/Spinner";
|
||||
import { useAlert } from "../../context/alertContext/AlertContext";
|
||||
import ErrorMessage from "../../utils/ErrorMessage";
|
||||
import { useAlert } from "../../alertContext/AlertContext";
|
||||
import { useAPIPost } from "../../api/hooks";
|
||||
|
||||
import { useForisModule, useForm } from "../hooks";
|
||||
import { STATES as SUBMIT_BUTTON_STATES, SubmitButton } from "./SubmitButton";
|
||||
import { ErrorMessage } from "../../utils/ErrorMessage";
|
||||
|
||||
ForisForm.propTypes = {
|
||||
/** Optional WebSocket object. See `scr/common/WebSockets.js`.
|
||||
@ -89,7 +89,7 @@ ForisForm.defaultProps = {
|
||||
* use exposed `ReactRouterDOM` object from `react-router-dom` library which is exposed by reForis.
|
||||
* See README for more information.
|
||||
* */
|
||||
function ForisForm({
|
||||
export function ForisForm({
|
||||
ws,
|
||||
forisConfig,
|
||||
prepData,
|
||||
@ -131,16 +131,16 @@ function ForisForm({
|
||||
return <Spinner />;
|
||||
}
|
||||
|
||||
const onSubmitHandler = (event) => {
|
||||
function onSubmitHandler(event) {
|
||||
event.preventDefault();
|
||||
resetFormData();
|
||||
dismissAlert();
|
||||
const copiedFormData = JSON.parse(JSON.stringify(formState.data));
|
||||
const preparedData = prepDataToSubmit(copiedFormData);
|
||||
post({ data: preparedData });
|
||||
};
|
||||
}
|
||||
|
||||
const getSubmitButtonState = () => {
|
||||
function getSubmitButtonState() {
|
||||
if (postState.state === API_STATE.SENDING) {
|
||||
return SUBMIT_BUTTON_STATES.SAVING;
|
||||
}
|
||||
@ -148,7 +148,7 @@ function ForisForm({
|
||||
return SUBMIT_BUTTON_STATES.LOAD;
|
||||
}
|
||||
return SUBMIT_BUTTON_STATES.READY;
|
||||
};
|
||||
}
|
||||
|
||||
const formIsDisabled =
|
||||
disabled ||
|
||||
@ -174,7 +174,7 @@ function ForisForm({
|
||||
)
|
||||
: onSubmitHandler;
|
||||
|
||||
const getMessageOnLeavingPage = () => {
|
||||
function getMessageOnLeavingPage() {
|
||||
if (
|
||||
JSON.stringify(formState.data) ===
|
||||
JSON.stringify(formState.initialData)
|
||||
@ -183,14 +183,14 @@ function ForisForm({
|
||||
return _(
|
||||
"Changes you made may not be saved. Are you sure you want to leave?"
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={formFieldsSize}>
|
||||
<Prompt message={getMessageOnLeavingPage} />
|
||||
<form onSubmit={onSubmit} ref={formReference}>
|
||||
{childrenWithFormProps}
|
||||
<div className="text-end">
|
||||
<div className="text-right">
|
||||
<SubmitButton
|
||||
state={getSubmitButtonState()}
|
||||
disabled={submitButtonIsDisabled}
|
||||
@ -200,5 +200,3 @@ function ForisForm({
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default ForisForm;
|
||||
|
@ -6,10 +6,9 @@
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import Button from "../../bootstrap/Button";
|
||||
import { Button } from "../../bootstrap/Button";
|
||||
|
||||
export const STATES = {
|
||||
READY: 1,
|
||||
|
@ -1,16 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import { useCallback, useEffect, useReducer } from "react";
|
||||
|
||||
import update from "immutability-helper";
|
||||
|
||||
import { useAPIGet } from "../api/hooks";
|
||||
import useWSForisModule from "../webSockets/hooks";
|
||||
import { useWSForisModule } from "../webSockets/hooks";
|
||||
|
||||
const FORM_ACTIONS = {
|
||||
updateValue: 1,
|
||||
|
64
src/index.js
64
src/index.js
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
@ -17,32 +17,31 @@ export {
|
||||
export { API_STATE } from "./api/utils";
|
||||
|
||||
// Bootstrap
|
||||
export { default as Alert, ALERT_TYPES } from "./bootstrap/Alert";
|
||||
export { default as Button } from "./bootstrap/Button";
|
||||
export { default as CheckBox } from "./bootstrap/CheckBox";
|
||||
export { default as CopyInput } from "./bootstrap/CopyInput";
|
||||
export { default as DownloadButton } from "./bootstrap/DownloadButton";
|
||||
export { default as DataTimeInput } from "./bootstrap/DataTimeInput";
|
||||
export { default as EmailInput } from "./bootstrap/EmailInput";
|
||||
export { default as FileInput } from "./bootstrap/FileInput";
|
||||
export { default as Input } from "./bootstrap/Input";
|
||||
export { default as NumberInput } from "./bootstrap/NumberInput";
|
||||
export { default as PasswordInput } from "./bootstrap/PasswordInput";
|
||||
export { default as RadioSet, Radio } from "./bootstrap/RadioSet";
|
||||
export { default as Select } from "./bootstrap/Select";
|
||||
export { default as TextInput } from "./bootstrap/TextInput";
|
||||
export { Alert, ALERT_TYPES } from "./bootstrap/Alert";
|
||||
export { Button } from "./bootstrap/Button";
|
||||
export { CheckBox } from "./bootstrap/CheckBox";
|
||||
export { DownloadButton } from "./bootstrap/DownloadButton";
|
||||
export { DataTimeInput } from "./bootstrap/DataTimeInput";
|
||||
export { EmailInput } from "./bootstrap/EmailInput";
|
||||
export { FileInput } from "./bootstrap/FileInput";
|
||||
export { Input } from "./bootstrap/Input";
|
||||
export { NumberInput } from "./bootstrap/NumberInput";
|
||||
export { PasswordInput } from "./bootstrap/PasswordInput";
|
||||
export { Radio, RadioSet } from "./bootstrap/RadioSet";
|
||||
export { Select } from "./bootstrap/Select";
|
||||
export { TextInput } from "./bootstrap/TextInput";
|
||||
export { formFieldsSize, buttonFormFieldsSize } from "./bootstrap/constants";
|
||||
export { default as Switch } from "./bootstrap/Switch";
|
||||
export { Switch } from "./bootstrap/Switch";
|
||||
|
||||
export { Spinner, SpinnerElement } from "./bootstrap/Spinner";
|
||||
export { Modal, ModalBody, ModalFooter, ModalHeader } from "./bootstrap/Modal";
|
||||
|
||||
// Common
|
||||
export { default as RebootButton } from "./common/RebootButton";
|
||||
export { default as WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
|
||||
export { default as ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
|
||||
export { RebootButton } from "./common/RebootButton";
|
||||
export { WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
|
||||
export { ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
|
||||
// Form
|
||||
export { default as ForisForm } from "./form/components/ForisForm";
|
||||
export { ForisForm } from "./form/components/ForisForm";
|
||||
export {
|
||||
SubmitButton,
|
||||
STATES as SUBMIT_BUTTON_STATES,
|
||||
@ -50,11 +49,11 @@ export {
|
||||
export { useForisModule, useForm } from "./form/hooks";
|
||||
|
||||
// WebSockets
|
||||
export { default as useWSForisModule } from "./webSockets/hooks";
|
||||
export { default as WebSockets } from "./webSockets/WebSockets";
|
||||
export { useWSForisModule } from "./webSockets/hooks";
|
||||
export { WebSockets } from "./webSockets/WebSockets";
|
||||
|
||||
// Utils
|
||||
export { default as Portal } from "./utils/Portal";
|
||||
export { Portal } from "./utils/Portal";
|
||||
export {
|
||||
undefinedIfEmpty,
|
||||
withoutUndefinedKeys,
|
||||
@ -68,11 +67,11 @@ export {
|
||||
withError,
|
||||
withErrorMessage,
|
||||
} from "./utils/conditionalHOCs";
|
||||
export { default as ErrorMessage } from "./utils/ErrorMessage";
|
||||
export { ErrorMessage } from "./utils/ErrorMessage";
|
||||
export { useClickOutside } from "./utils/hooks";
|
||||
export { default as toLocaleDateString } from "./utils/datetime";
|
||||
export { default as displayCard } from "./utils/displayCard";
|
||||
export { default as isPluginInstalled } from "./utils/isPluginInstalled";
|
||||
export { toLocaleDateString } from "./utils/datetime";
|
||||
export { displayCard } from "./utils/displayCard";
|
||||
export { isPluginInstalled } from "./utils/isPluginInstalled";
|
||||
|
||||
// Foris URL
|
||||
export { ForisURLs, REFORIS_URL_PREFIX } from "./utils/forisUrls";
|
||||
@ -90,13 +89,4 @@ export {
|
||||
} from "./utils/validations";
|
||||
|
||||
// Alert context
|
||||
export {
|
||||
AlertContextProvider,
|
||||
useAlert,
|
||||
} from "./context/alertContext/AlertContext";
|
||||
|
||||
// Customization context
|
||||
export {
|
||||
CustomizationContextProvider,
|
||||
useCustomizationContext,
|
||||
} from "./context/customizationContext/CustomizationContext";
|
||||
export { AlertContextProvider, useAlert } from "./alertContext/AlertContext";
|
||||
|
@ -14,7 +14,6 @@ import { render } from "@testing-library/react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { AlertContextMock } from "./alertContextMock";
|
||||
import { CustomizationContextMock } from "./cutomizationContextMock";
|
||||
|
||||
Wrapper.propTypes = {
|
||||
children: PropTypes.oneOfType([
|
||||
@ -25,13 +24,11 @@ Wrapper.propTypes = {
|
||||
|
||||
function Wrapper({ children }) {
|
||||
return (
|
||||
<CustomizationContextMock>
|
||||
<AlertContextMock>
|
||||
<StaticRouter>
|
||||
<UIDReset>{children}</UIDReset>
|
||||
</StaticRouter>
|
||||
</AlertContextMock>
|
||||
</CustomizationContextMock>
|
||||
<AlertContextMock>
|
||||
<StaticRouter>
|
||||
<UIDReset>{children}</UIDReset>
|
||||
</StaticRouter>
|
||||
</AlertContextMock>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
window.CustomizationContext = React.createContext();
|
||||
|
||||
const deviceDetails = {
|
||||
kernel: "5.x.x",
|
||||
model: "Turris Omnia",
|
||||
os_branch: {
|
||||
mode: "branch",
|
||||
value: "hbs",
|
||||
},
|
||||
os_version: "6.x.x",
|
||||
reforis_version: "1.x.x",
|
||||
serial: 123456789,
|
||||
};
|
||||
|
||||
const isCustomized = false;
|
||||
|
||||
function CustomizationContextMock({ children }) {
|
||||
return (
|
||||
<CustomizationContext.Provider value={{ deviceDetails, isCustomized }}>
|
||||
{children}
|
||||
</CustomizationContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
export { CustomizationContextMock };
|
@ -1,10 +1,10 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
import React from "react";
|
||||
|
||||
import mockAxios from "jest-mock-axios";
|
||||
import moment from "moment-timezone";
|
||||
import "./mockGlobals";
|
||||
@ -26,8 +26,3 @@ jest.doMock("moment", () => {
|
||||
return moment;
|
||||
});
|
||||
Date.now = jest.fn(() => new Date(Date.UTC(2019, 1, 1, 12, 13, 14)).valueOf());
|
||||
|
||||
// Mock Font Awesome v6 library
|
||||
jest.mock("@fortawesome/react-fontawesome", () => ({
|
||||
FontAwesomeIcon: () => <i className="fa" />,
|
||||
}));
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
ErrorMessage.propTypes = {
|
||||
@ -17,8 +16,6 @@ ErrorMessage.defaultProps = {
|
||||
message: _("An error occurred while fetching data."),
|
||||
};
|
||||
|
||||
function ErrorMessage({ message }) {
|
||||
export function ErrorMessage({ message }) {
|
||||
return <p className="text-center text-danger">{message}</p>;
|
||||
}
|
||||
|
||||
export default ErrorMessage;
|
||||
|
@ -1,22 +1,14 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
import ReactDOM from "react-dom";
|
||||
|
||||
Portal.propTypes = {
|
||||
containerId: PropTypes.string.isRequired,
|
||||
children: PropTypes.node.isRequired,
|
||||
};
|
||||
|
||||
function Portal({ containerId, children }) {
|
||||
export function Portal({ containerId, children }) {
|
||||
const container = document.getElementById(containerId);
|
||||
if (container) return ReactDOM.createPortal(children, container);
|
||||
return null;
|
||||
}
|
||||
|
||||
export default Portal;
|
||||
|
@ -5,7 +5,7 @@
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import toLocaleDateString from "../datetime";
|
||||
import { toLocaleDateString } from "../datetime";
|
||||
|
||||
describe("toLocaleDateString", () => {
|
||||
it("should work with different locale", () => {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
@ -7,23 +7,16 @@
|
||||
|
||||
import React from "react";
|
||||
|
||||
import ErrorMessage from "./ErrorMessage";
|
||||
import { API_STATE } from "../api/utils";
|
||||
import { Spinner } from "../bootstrap/Spinner";
|
||||
import { API_STATE } from "../api/utils";
|
||||
import { ErrorMessage } from "./ErrorMessage";
|
||||
|
||||
function withEither(conditionalFn, Either) {
|
||||
return (Component) => {
|
||||
function WithEither(props) {
|
||||
if (conditionalFn(props)) {
|
||||
return <Either {...props} />;
|
||||
}
|
||||
return <Component {...props} />;
|
||||
return (Component) => (props) => {
|
||||
if (conditionalFn(props)) {
|
||||
return <Either {...props} />;
|
||||
}
|
||||
|
||||
// Setting displayName for better debugging
|
||||
WithEither.displayName = `WithEither(${Component.displayName || Component.name || "Component"})`;
|
||||
|
||||
return WithEither;
|
||||
return <Component {...props} />;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,9 @@
|
||||
import moment from "moment";
|
||||
|
||||
function toLocaleDateString(date, { inputFormat, outputFormat = "LLL" } = {}) {
|
||||
export function toLocaleDateString(
|
||||
date,
|
||||
{ inputFormat, outputFormat = "LLL" } = {}
|
||||
) {
|
||||
const parsedDate = inputFormat ? moment(date, inputFormat) : moment(date);
|
||||
return parsedDate.locale(ForisTranslations.locale).format(outputFormat);
|
||||
}
|
||||
|
||||
export default toLocaleDateString;
|
||||
|
@ -1,11 +1,11 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
function displayCard({ package_lists: packages }, cardName) {
|
||||
export function displayCard({ package_lists: packages }, cardName) {
|
||||
const enabledPackagesNames = [];
|
||||
packages
|
||||
.filter((item) => item.enabled)
|
||||
@ -21,5 +21,3 @@ function displayCard({ package_lists: packages }, cardName) {
|
||||
});
|
||||
return enabledPackagesNames.includes(cardName);
|
||||
}
|
||||
|
||||
export default displayCard;
|
||||
|
@ -36,6 +36,5 @@ export const ForisURLs = {
|
||||
luci: "/cgi-bin/luci",
|
||||
|
||||
// API
|
||||
about: `${REFORIS_API_URL_PREFIX}/about`,
|
||||
reboot: `${REFORIS_API_URL_PREFIX}/reboot`,
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
|
@ -1,11 +1,9 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
const isPluginInstalled = (pluginName) =>
|
||||
export const isPluginInstalled = (pluginName) =>
|
||||
ForisPlugins.some((plugin) => plugin.name === pluginName);
|
||||
|
||||
export default isPluginInstalled;
|
||||
|
@ -23,15 +23,12 @@ export const ERROR_MESSAGES = {
|
||||
const REs = {
|
||||
IPv4: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
|
||||
IPv6: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,
|
||||
IPv6Prefix:
|
||||
/^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))$/,
|
||||
IPv6Prefix: /^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))$/,
|
||||
domain: /^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/,
|
||||
hostname:
|
||||
/^[a-z\d]([a-z\d-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d-]{0,61}[a-z\d])?)*$/i,
|
||||
hostname: /^[a-z\d]([a-z\d-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d-]{0,61}[a-z\d])?)*$/i,
|
||||
DUID: /^([0-9a-fA-F]{2}){4}([0-9a-fA-F]{2})*$/,
|
||||
MAC: /^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/,
|
||||
MultipleEmails:
|
||||
/^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)( *, *[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)*$/,
|
||||
MultipleEmails: /^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)( *, *[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)*$/,
|
||||
};
|
||||
|
||||
const createValidator = (fieldType) => (value) => {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2022 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
* Copyright (C) 2020-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
@ -10,12 +10,12 @@
|
||||
const PROTOCOL = window.location.protocol === "http:" ? "ws" : "wss";
|
||||
|
||||
const URL = process.env.LIGHTTPD
|
||||
? `${PROTOCOL}://${window.location.host}/${process.env.WSPATH || "foris-ws"}`
|
||||
: `${PROTOCOL}://${window.location.hostname}:9081`;
|
||||
? `${PROTOCOL}://${window.location.host}/foris-ws`
|
||||
: `${PROTOCOL}://${window.location.hostname}:${9081}`;
|
||||
|
||||
const WAITING_FOR_CONNECTION_TIMEOUT = 500;
|
||||
|
||||
class WebSockets {
|
||||
export class WebSockets {
|
||||
constructor() {
|
||||
this.ws = new WebSocket(URL);
|
||||
this.ws.onerror = (e) => {
|
||||
@ -120,5 +120,3 @@ class WebSockets {
|
||||
this.ws.close();
|
||||
}
|
||||
}
|
||||
|
||||
export default WebSockets;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
||||
*
|
||||
* This is free software, licensed under the GNU General Public License v3.
|
||||
* See /LICENSE for more information.
|
||||
@ -7,8 +7,7 @@
|
||||
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
/* eslint-disable default-param-last */
|
||||
function useWSForisModule(
|
||||
export function useWSForisModule(
|
||||
ws,
|
||||
module,
|
||||
action = "update_settings",
|
||||
@ -42,5 +41,3 @@ function useWSForisModule(
|
||||
|
||||
return [data];
|
||||
}
|
||||
|
||||
export default useWSForisModule;
|
||||
|
@ -43,7 +43,7 @@ module.exports = {
|
||||
},
|
||||
{
|
||||
name: "Alert Context",
|
||||
components: ["src/context/alertContext/AlertContext.js"],
|
||||
components: ["src/alertContext/AlertContext.js"],
|
||||
exampleMode: "expand",
|
||||
usageMode: "expand",
|
||||
},
|
||||
@ -51,14 +51,6 @@ module.exports = {
|
||||
sectionDepth: 1,
|
||||
},
|
||||
|
||||
{
|
||||
name: "Customization Context",
|
||||
components: [
|
||||
"src/context/customizationContext/CustomizationContext.js",
|
||||
],
|
||||
exampleMode: "expand",
|
||||
usageMode: "expand",
|
||||
},
|
||||
{
|
||||
name: "Bootstrap components",
|
||||
description: "Set of bootstrap components.",
|
||||
@ -105,5 +97,8 @@ module.exports = {
|
||||
},
|
||||
],
|
||||
},
|
||||
devServer: {
|
||||
publicPath: "/",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
@ -1,23 +1,23 @@
|
||||
# Czech translations for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"PO-Revision-Date: 2023-11-23 16:03+0000\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: 2021-08-18 15:36+0000\n"
|
||||
"Last-Translator: Lukas Jelinek <lukas.jelinek@nic.cz>\n"
|
||||
"Language: cs\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-"
|
||||
"js/cs/>\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -35,18 +35,6 @@ msgstr "Neobdržena žádná odezva."
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr "Zkopírováno!"
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr "Kopírovat"
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr "Vyžadován restart."
|
||||
@ -65,41 +53,38 @@ msgstr "Opravdu chcete router restartovat?"
|
||||
|
||||
#: src/common/RebootButton.js:71
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
msgstr "Storno"
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr "Potvrdit restart"
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr "Při resetu nastavení Wi-Fi došlo k chybě."
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr "Nastavení Wi-Fi jsou uvedena do výchozího stavu."
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr "Reset nastavení Wi-Fi"
|
||||
msgstr "Resetovat nastavení Wi-Fi"
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
"Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit "
|
||||
"nastavení Wi-Fi. Je třeba upozornit, že se tím odstraní aktuální "
|
||||
"konfigurace Wi-Fi a obnoví se výchozí hodnoty."
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr "Wi-Fi ${deviceID + 1}"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr "Heslo"
|
||||
|
||||
@ -108,8 +93,8 @@ msgid "Hide SSID"
|
||||
msgstr "Skrýt SSID"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgstr "Režim 802.11n/ac/ax"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr "Režim 802.11n/ac"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
msgid "Channel"
|
||||
@ -117,70 +102,54 @@ msgstr "Kanál"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:211
|
||||
msgid "Encryption"
|
||||
msgstr "Šifrování"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr "Vypnout Management Frame Protection"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
"Máte-li problémy při připojování k přístupovému bodu Wi-Fi, zkuste "
|
||||
"vypnout Management Frame Protection."
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr "automaticky"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
#, fuzzy
|
||||
msgid "Custom"
|
||||
msgstr "Uživatelsky určené"
|
||||
msgstr "automaticky"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr "Zapnout Wi-Fi pro hosty"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
#, fuzzy
|
||||
msgid "Show QR code"
|
||||
msgstr "Wi-Fi QR kód"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr "Wi-Fi QR kód"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr "Stáhnout PDF"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr "SSID nemůže být delší než 32 znaků"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr "SSID je třeba vyplnit"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr "SSID nemůže být delší než 32 bajtů"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
#, fuzzy
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr "Heslo nesmí obsahovat více než 63 znaků"
|
||||
msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:9
|
||||
msgid "Disabled"
|
||||
@ -211,32 +180,36 @@ msgid "802.11ac - 160 MHz wide channel"
|
||||
msgstr "802.11ac – kanál šíře 160 MHz"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:16
|
||||
#, fuzzy
|
||||
msgid "802.11ax - 20 MHz wide channel"
|
||||
msgstr "802.11ax – kanál šíře 20 MHz"
|
||||
msgstr "802.11ac – kanál šíře 20 MHz"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:17
|
||||
#, fuzzy
|
||||
msgid "802.11ax - 40 MHz wide channel"
|
||||
msgstr "802.11ax – kanál šíře 40 MHz"
|
||||
msgstr "802.11ac – kanál šíře 40 MHz"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:18
|
||||
#, fuzzy
|
||||
msgid "802.11ax - 80 MHz wide channel"
|
||||
msgstr "802.11ax – kanál šíře 80 MHz"
|
||||
msgstr "802.11ac – kanál šíře 80 MHz"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:19
|
||||
#, fuzzy
|
||||
msgid "802.11ax - 160 MHz wide channel"
|
||||
msgstr "802.11ax – kanál šíře 160 MHz"
|
||||
msgstr "802.11ac – kanál šíře 160 MHz"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:26
|
||||
msgid "WPA3 only"
|
||||
msgstr "pouze WPA3"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:27
|
||||
msgid "WPA3 with WPA2 as fallback (default)"
|
||||
msgstr "WPA3, nouzově WPA2 (výchozí)"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:28
|
||||
msgid "WPA2 only"
|
||||
msgstr "pouze WPA2"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:31
|
||||
msgid ""
|
||||
@ -247,8 +220,13 @@ msgstr ""
|
||||
"problémy."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgstr "Předsdílený klíč WPA2/3, který je vyžadován pro připojení se k síti."
|
||||
#, fuzzy
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" WPA2 předsdílený klíč, který je vyžadován pro připojení se k "
|
||||
"síti.\n"
|
||||
" "
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
msgid "If set, network is not visible when scanning for available networks."
|
||||
@ -257,30 +235,38 @@ msgstr ""
|
||||
"vyhledávat dostupné sítě."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:40
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The 2.4 GHz band is more widely supported by clients, but tends to have "
|
||||
"more interference. The 5 GHz band is a newer standard and may not be "
|
||||
"supported by all your devices. It usually has less interference, but the "
|
||||
"signal does not carry so well indoors."
|
||||
msgstr ""
|
||||
"Pásmo 2,4 GHz je v klientských zařízeních podporováno nejčastěji, bývá "
|
||||
"ale více zarušené. Pásmo 5 GHz je novější standard a nemusí být "
|
||||
"podporováno všemi vámi používanými zařízeními. Obvykle bývá méně "
|
||||
"zarušené, signál se ale hůře šíří uvnitř budov."
|
||||
"\n"
|
||||
" Pásmo 2,4 GHz je v klientských zařízeních podporováno nejčastěji,"
|
||||
" ale bývá více zarušené. Pásmo 5 GHz je\n"
|
||||
" novější standard a nemusí být podporováno všemi vámi používanými "
|
||||
"zařízeními. Obvykle bývá méně zarušené,\n"
|
||||
" ale signál se hůře šíři uvnitř budov."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
"Změna tohoto parametru upraví režim fungování 802.11n/ac. 802.11n s "
|
||||
"kanály o šíři 40 MHz může pomoci k vyšší propustnosti, je ale náchylnější"
|
||||
" na rušení. Pokud nevíte co zvolit, použijte výchozí volbu s kanálem šíře"
|
||||
" 20 MHz."
|
||||
"\n"
|
||||
" Změna tohoto upraví režim fungování 802.11n/ac. 802.11n s kanály "
|
||||
"o šíři 40 MHz kanály může pomoci k vyšší\n"
|
||||
" propustnosti, ale je náchylnější na rušení. Pokud nevíte co "
|
||||
"zvolit, použijte výchozí volbu s kanálem šíře\n"
|
||||
" 20 MHz.\n"
|
||||
" "
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Enables Wi-Fi for guests, which is separated from LAN network. Devices "
|
||||
"connected to this network are allowed to access the internet, but aren't "
|
||||
@ -288,10 +274,14 @@ msgid ""
|
||||
"router. Parameters of the guest network can be set in the Guest network "
|
||||
"tab."
|
||||
msgstr ""
|
||||
"Zapíná Wi-Fi pro hosty, která je oddělená od místní sítě (LAN). Zařízením"
|
||||
" připojeným k této síti je umožněn přístup do Internetu, ale už ne na "
|
||||
"ostatní zařízení a k rozhraní pro nastavování směrovače. Parametry sítě "
|
||||
"pro hosty je možné nastavit na panelu „Síť pro hosty“."
|
||||
"\n"
|
||||
" Zapíná Wi-Fi pro hosty, která je oddělená od místní sítě (LAN). "
|
||||
"Zařízením připojeným k této síti je umožněn\n"
|
||||
" přístup do Internetu, ale už ne na ostatní zařízení a k rozhraní "
|
||||
"pro nastavování směrovače.\n"
|
||||
" Parametry sítě pro hosty je možné nastavit na panelu „Síť pro "
|
||||
"hosty“.\n"
|
||||
" "
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:49
|
||||
msgid ""
|
||||
@ -300,10 +290,6 @@ msgid ""
|
||||
"without WPA3 support require older WPA2. If you experience issues with "
|
||||
"connecting older devices, try to enable WPA2."
|
||||
msgstr ""
|
||||
"Standard WPA3 je nová nejbezpečnější metoda, již se doporučuje používat "
|
||||
"se všemi zařízeními, která ji podporují. Starší zařízení bez podpory WPA3"
|
||||
" potřebují starší WPA2. Zaznamenáte-li problémy s připojováním starších "
|
||||
"zařízení, zkuste zapnout WPA2."
|
||||
|
||||
#: src/form/components/ForisForm.js:121
|
||||
msgid "Settings saved successfully"
|
||||
@ -315,19 +301,19 @@ msgstr ""
|
||||
"Změny, které byly provedeny, nebyly uloženy. Jste si jistý, že chcete "
|
||||
"opustit stránku?"
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
msgid "Updating"
|
||||
msgstr "Aktualizuji"
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
msgid "Load settings"
|
||||
msgstr "Načítám nastavení"
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr "Uložit"
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr "Došlo k chybě při získávání dat."
|
||||
|
||||
@ -348,6 +334,7 @@ msgid "This is not a valid domain name."
|
||||
msgstr "Toto není platné doménové jméno."
|
||||
|
||||
#: src/utils/validations.js:17
|
||||
#, fuzzy
|
||||
msgid "This is not a valid hostname."
|
||||
msgstr "Toto není platné doménové jméno."
|
||||
|
||||
|
@ -1,22 +1,22 @@
|
||||
# Danish translations for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: da\n"
|
||||
"Language-Team: da <LL@li.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -34,18 +34,6 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
@ -70,32 +58,32 @@ msgstr ""
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
@ -104,7 +92,7 @@ msgid "Hide SSID"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
@ -115,63 +103,48 @@ msgstr ""
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
msgid "Show QR code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr ""
|
||||
|
||||
@ -238,7 +211,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
@ -255,10 +228,10 @@ msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
@ -286,19 +259,19 @@ msgstr ""
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
msgid "Load settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr ""
|
||||
|
||||
@ -407,20 +380,3 @@ msgstr ""
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "802.11n/ac mode"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change this to adjust 802.11n/ac mode"
|
||||
#~ " of operation. 802.11n with 40 MHz"
|
||||
#~ " wide channels can yield higher "
|
||||
#~ "throughput but can cause more "
|
||||
#~ "interference in the network. If you "
|
||||
#~ "don't know what to choose, use the"
|
||||
#~ " default option with 20 MHz wide "
|
||||
#~ "channel."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -1,23 +1,23 @@
|
||||
# German translations for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
|
||||
"Last-Translator: Erik Pfannenstein <debianignatz@gmx.de>\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: 2021-09-24 19:38+0000\n"
|
||||
"Last-Translator: CryptKid <CryptKiddie@chaospott.de>\n"
|
||||
"Language: de\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/turris/foris-"
|
||||
"js/de/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -35,18 +35,6 @@ msgstr "Keine Antwort erhalten."
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr "Ein unbekannter API-Fehler ist aufgetreten."
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr "Kopiert!"
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr "Kopieren"
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr "Neustart-Einleitung fehlgeschlagen."
|
||||
@ -71,37 +59,34 @@ msgstr "Abbrechen"
|
||||
msgid "Confirm reboot"
|
||||
msgstr "Neustart bestätigen"
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr ""
|
||||
"Ein Fehler ist während der Zurücksetzung der WLAN-Einstellungen "
|
||||
"aufgetreten."
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr "WLAN-Einstellungen wurden auf Standard zurückgesetzt."
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr "WLAN-Einstellungen zurücksetzen"
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
"Falls die Anzahl der WLAN-Karten nicht korrekt ist, könnte es helfen, die"
|
||||
" WLAN-Einstellungen zurückzusetzen. Beachten Sie, dass dabei die aktuelle"
|
||||
" WLAN-Konfiguration mit den Werkseinstellungen überschrieben wird."
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr "WLAN ${deviceID + 1}"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
@ -110,8 +95,8 @@ msgid "Hide SSID"
|
||||
msgstr "SSID verbergen"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgstr "802.11n/ac/ax-Modus"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr "802.11n/ac Modus"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
msgid "Channel"
|
||||
@ -119,70 +104,54 @@ msgstr "Kanal"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:211
|
||||
msgid "Encryption"
|
||||
msgstr "Verschlüsselung"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr "Management Frame Protection abschalten"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
"Falls Sie beim Verbinden mit dem WiFi-Access-Point Probleme haben, "
|
||||
"schalten Sie testweise die Management Frame Protection ab."
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr "automatisch"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
#, fuzzy
|
||||
msgid "Custom"
|
||||
msgstr "Benutzerdefiniert"
|
||||
msgstr "automatisch"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr "Gast-WLAN aktivieren"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
#, fuzzy
|
||||
msgid "Show QR code"
|
||||
msgstr "WLAN QR-Code"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr "WLAN QR-Code"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr "PDF herunterladen"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr "Die SSID darf nicht länger als 32 Zeichen sein"
|
||||
msgstr "SSID darf nicht länger als 32 Symbole sein"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr "SSID darf nicht leer sein"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr "SSID darf nicht länger als 32 Symbole sein"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "SSID can't be empty"
|
||||
msgstr "Die SSID darf nicht leer sein"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr "Die SSID darf nicht länger als 32 Bytes sein"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr "Das Passwort muss mindestens 8 Zeichen enthalten"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
#, fuzzy
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr "Das Passwort darf höchstens 63 Zeichen enthalten"
|
||||
msgstr "Das Passwort muss mindestens 8 Zeichen enthalten"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:9
|
||||
msgid "Disabled"
|
||||
@ -209,48 +178,56 @@ msgid "802.11ac - 80 MHz wide channel"
|
||||
msgstr "802.11ac - 80 MHz breiter Kanal"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:15
|
||||
#, fuzzy
|
||||
msgid "802.11ac - 160 MHz wide channel"
|
||||
msgstr "802.11ac - 160 MHz breiter Kanal"
|
||||
msgstr "802.11ac - 80 MHz breiter Kanal"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:16
|
||||
#, fuzzy
|
||||
msgid "802.11ax - 20 MHz wide channel"
|
||||
msgstr "802.11ax - 20 MHz breiter Kanal"
|
||||
msgstr "802.11ac - 20 MHz breiter Kanal"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:17
|
||||
#, fuzzy
|
||||
msgid "802.11ax - 40 MHz wide channel"
|
||||
msgstr "802.11ax - 40 MHz breiter Kanal"
|
||||
msgstr "802.11ac - 40 MHz breiter Kanal"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:18
|
||||
#, fuzzy
|
||||
msgid "802.11ax - 80 MHz wide channel"
|
||||
msgstr "802.11ax - 80 MHz breiter Kanal"
|
||||
msgstr "802.11ac - 80 MHz breiter Kanal"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:19
|
||||
#, fuzzy
|
||||
msgid "802.11ax - 160 MHz wide channel"
|
||||
msgstr "802.11ax - 160 MHz breiter Kanal"
|
||||
msgstr "802.11ac - 80 MHz breiter Kanal"
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:26
|
||||
msgid "WPA3 only"
|
||||
msgstr "Nur WPA3"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:27
|
||||
msgid "WPA3 with WPA2 as fallback (default)"
|
||||
msgstr "WPA3 mit WPA2 als Ausweichmöglichkeit (Voreinstellung)"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:28
|
||||
msgid "WPA2 only"
|
||||
msgstr "Nur WPA2"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:31
|
||||
msgid ""
|
||||
"SSID which contains non-standard characters could cause problems on some "
|
||||
"devices."
|
||||
msgstr ""
|
||||
"SSIDs, die nicht standardmäßige Zeichen enthalten, können auf manchen "
|
||||
"Geräten Probleme verursachen."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgstr "WPA2/3 Pre-Shard Key, der zum Verbinden mit dem Netzwerk notwendig ist."
|
||||
#, fuzzy
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" WPA2 Pre-Shared Key, der für die Verbindung mit dem Netzwerk "
|
||||
"benötigt wird.\n"
|
||||
" "
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
msgid "If set, network is not visible when scanning for available networks."
|
||||
@ -259,31 +236,39 @@ msgstr ""
|
||||
"drahtlosen Netzwerke angezeigt."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:40
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The 2.4 GHz band is more widely supported by clients, but tends to have "
|
||||
"more interference. The 5 GHz band is a newer standard and may not be "
|
||||
"supported by all your devices. It usually has less interference, but the "
|
||||
"signal does not carry so well indoors."
|
||||
msgstr ""
|
||||
"Das 2,4 GHz-Band wird von allen Geräten unterstützt, ist aber tendenziell"
|
||||
" stärker mit Interferenzen belastet. Das 5-GHz-Band ist ein neuerer "
|
||||
"Standard, der möglicherweise nicht von allen Ihren Geräten unterstützt "
|
||||
"wird. Es hat in der Regel weniger Interferenzen, aber das Signal trägt "
|
||||
"nicht so gut in Innenräumen."
|
||||
"\n"
|
||||
" Das 2,4 GHz-Band wird stärker von Clients unterstützt, hat aber "
|
||||
"tendenziell mehr Interferenzen. Das 5-GHz-Band ist ein\n"
|
||||
" neuerer Standard und wird möglicherweise nicht von allen Geräten "
|
||||
"unterstützt. Es hat in der Regel weniger Interferenzen, aber das Signal\n"
|
||||
" trägt nicht so gut drinnen."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
"Ändern Sie diese Option, um den 802.11n/ac/ax-Betriebsmodus anzupassen. "
|
||||
"40 MHz breite Kanäle können bei 802.11n mehr Daten transportieren, jedoch"
|
||||
" zu mehr Interferenzen im Netzwerk führen. Wenn Sie nicht wissen, was Sie"
|
||||
" wählen sollen, verwenden Sie die Voreinstellung mit 20 MHz Kanalbreite."
|
||||
"\n"
|
||||
" Ändern Sie diese Option, um den Betriebsmodus 802.11n/ac "
|
||||
"anzupassen. 802.11n mit 40 MHz breiten Kanälen können höhere\n"
|
||||
" durchsatz, kann jedoch zu mehr Interferenzen im Netzwerk führen. "
|
||||
"Wenn Sie nicht wissen, was Sie wählen sollen, verwenden Sie die "
|
||||
"Standardeinstellung\n"
|
||||
" Option mit 20 MHz breitem Kanal.\n"
|
||||
" "
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Enables Wi-Fi for guests, which is separated from LAN network. Devices "
|
||||
"connected to this network are allowed to access the internet, but aren't "
|
||||
@ -291,11 +276,14 @@ msgid ""
|
||||
"router. Parameters of the guest network can be set in the Guest network "
|
||||
"tab."
|
||||
msgstr ""
|
||||
"Ermöglicht ein Wi-Fi für Gäste, das vom LAN-Netzwerk getrennt ist. "
|
||||
"Geräte, die mit diesem Netzwerk verbunden sind, dürfen auf das Internet "
|
||||
"zugreifen, nicht jedoch auf andere Geräte oder die "
|
||||
"Konfigurationsschnittstelle des Routers. Die Parameter des Gastnetzwerks "
|
||||
"können auf der Gastnetzwerk-Registerkarte eingestellt werden."
|
||||
"\n"
|
||||
" Ermöglicht Wi-Fi für Gäste, das vom LAN-Netzwerk getrennt ist. "
|
||||
"Geräte, die mit diesem Netzwerk verbunden sind, dürfen\n"
|
||||
" auf das Internet zugreifen, dürfen aber nicht auf andere Geräte "
|
||||
"und die Konfigurationsschnittstelle des Routers zugreifen.\n"
|
||||
" Die Parameter des Gastnetzwerks können in der Registerkarte "
|
||||
"Gastnetzwerk eingestellt werden.\n"
|
||||
" "
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:49
|
||||
msgid ""
|
||||
@ -304,11 +292,6 @@ msgid ""
|
||||
"without WPA3 support require older WPA2. If you experience issues with "
|
||||
"connecting older devices, try to enable WPA2."
|
||||
msgstr ""
|
||||
"Der WPA3-Standard ist die neue Verschlüsselungsmethode mit der besten "
|
||||
"Sicherheit. Er empfiehlt sich für jedes Gerät, das ihn unterstützt, aber "
|
||||
"ältere Geräte, bei denen das noch nicht der Fall ist, müssen auf das "
|
||||
"ältere WPA2 ausweichen. Falls Sie Probleme dabei haben, ältere Geräte mit"
|
||||
" dem WLAN zu verbinden, schalten Sie versuchsweise WPA2 ein."
|
||||
|
||||
#: src/form/components/ForisForm.js:121
|
||||
msgid "Settings saved successfully"
|
||||
@ -317,28 +300,26 @@ msgstr "Einstellungen erfolgreich gespeichert"
|
||||
#: src/form/components/ForisForm.js:183
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
"Änderungen, die Sie vorgenommen haben, werden möglicherweise nicht "
|
||||
"gespeichert. Möchten Sie wirklich gehen?"
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
msgid "Updating"
|
||||
msgstr "Aktualisiere"
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
msgid "Load settings"
|
||||
msgstr "Einstellungen laden"
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr "Beim Abruf der Daten ist ein Fehler aufgetreten."
|
||||
msgstr ""
|
||||
|
||||
#: src/utils/validations.js:13
|
||||
msgid "This is not a valid IPv4 address."
|
||||
msgstr "Das ist keine gültige IPv4 Adresse."
|
||||
msgstr "Dies ist keine gültige IPv4-Adresse."
|
||||
|
||||
#: src/utils/validations.js:14
|
||||
msgid "This is not a valid IPv6 address."
|
||||
@ -353,8 +334,9 @@ msgid "This is not a valid domain name."
|
||||
msgstr "Dies ist kein gültiger Domainname."
|
||||
|
||||
#: src/utils/validations.js:17
|
||||
#, fuzzy
|
||||
msgid "This is not a valid hostname."
|
||||
msgstr "Dies ist kein gültiger Hostname."
|
||||
msgstr "Dies ist kein gültiger Domainname."
|
||||
|
||||
#: src/utils/validations.js:18
|
||||
msgid "This is not a valid DUID."
|
||||
|
@ -1,23 +1,23 @@
|
||||
# Greek translations for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: 2021-02-09 16:50+0000\n"
|
||||
"Last-Translator: Michalis <michalisntovas@yahoo.gr>\n"
|
||||
"Language: el\n"
|
||||
"Language-Team: Greek <https://hosted.weblate.org/projects/turris/foris-"
|
||||
"js/el/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -35,18 +35,6 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
@ -71,32 +59,32 @@ msgstr "Άκυρο"
|
||||
msgid "Confirm reboot"
|
||||
msgstr "Επιβεβαίωση επανεκκίνησης"
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
@ -105,7 +93,7 @@ msgid "Hide SSID"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
@ -117,63 +105,48 @@ msgstr "Άκυρο"
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
msgid "Show QR code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr ""
|
||||
|
||||
@ -240,7 +213,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
@ -257,10 +230,10 @@ msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
@ -288,19 +261,19 @@ msgstr ""
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
msgid "Load settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr ""
|
||||
|
||||
@ -409,20 +382,3 @@ msgstr ""
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "802.11n/ac mode"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change this to adjust 802.11n/ac mode"
|
||||
#~ " of operation. 802.11n with 40 MHz"
|
||||
#~ " wide channels can yield higher "
|
||||
#~ "throughput but can cause more "
|
||||
#~ "interference in the network. If you "
|
||||
#~ "don't know what to choose, use the"
|
||||
#~ " default option with 20 MHz wide "
|
||||
#~ "channel."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -1,23 +1,23 @@
|
||||
# English translations for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: 2019-10-17 09:28+0000\n"
|
||||
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
|
||||
"Language: en\n"
|
||||
"Language-Team: English "
|
||||
"<https://hosted.weblate.org/projects/turris/reforis/en/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -35,18 +35,6 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
@ -71,32 +59,32 @@ msgstr ""
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
@ -105,7 +93,7 @@ msgid "Hide SSID"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
@ -116,63 +104,48 @@ msgstr ""
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
msgid "Show QR code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr ""
|
||||
|
||||
@ -239,7 +212,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
@ -256,10 +229,10 @@ msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
@ -287,19 +260,19 @@ msgstr ""
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
msgid "Load settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr ""
|
||||
|
||||
@ -405,20 +378,3 @@ msgstr ""
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "802.11n/ac mode"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change this to adjust 802.11n/ac mode"
|
||||
#~ " of operation. 802.11n with 40 MHz"
|
||||
#~ " wide channels can yield higher "
|
||||
#~ "throughput but can cause more "
|
||||
#~ "interference in the network. If you "
|
||||
#~ "don't know what to choose, use the"
|
||||
#~ " default option with 20 MHz wide "
|
||||
#~ "channel."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -1,24 +1,23 @@
|
||||
# Spanish translations for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"PO-Revision-Date: 2024-08-24 13:09+0000\n"
|
||||
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/turris/foris-js/"
|
||||
"es/>\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: 2020-05-25 13:41+0000\n"
|
||||
"Last-Translator: Eduardo Cuthbert <elguber@gmail.com>\n"
|
||||
"Language: es\n"
|
||||
"Language-Team: Spanish "
|
||||
"<https://hosted.weblate.org/projects/turris/reforis/es/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.7.1-dev\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -38,223 +37,189 @@ msgstr ""
|
||||
"Un error desconocido ha ocurrido. Compruebe la consola para mas "
|
||||
"informaciòn."
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr "¡Copiado!"
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr "La petición de reinicio ha fallado."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:51
|
||||
msgid "Reboot"
|
||||
msgstr "Reiniciar"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:66
|
||||
msgid "Warning!"
|
||||
msgstr "¡Atención!"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:68
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr "¿Estás seguro de que quieres reiniciar el router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:71
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr "Confirmar reinicio"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr "Ocurrió un error durante el reseteo de los ajustes Wi-Fi."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr "Los ajustes Wi-Fi se han definido por defecto."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr "Resetear los ajustes Wi-Fi"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
"Si cierto número de tarjetas inalámbricas no coincide, puedes intentar a "
|
||||
"resetar los ajustes Wi-Fi. Ten en cuenta que esto eliminará la "
|
||||
"configuración Wi-Fi actual, y restaurará los ajustes por defecto."
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr "Wi-Fi ${deviceID + 1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:146
|
||||
msgid "Hide SSID"
|
||||
msgstr "Ocultar SSID"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgstr "Modo 802.11n/ac/ax"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
msgid "Channel"
|
||||
msgstr "Canal"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:211
|
||||
msgid "Encryption"
|
||||
msgstr "Cifrado"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr "Desactivar Protected Management Frames"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
"Si tienes problemas para conectarte a un punto de acceso Wi-Fi, intenta "
|
||||
"desactivar Management Frame Protection."
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr "automático"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
msgid "Custom"
|
||||
msgstr "Personalizado"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr "Activar el modo Wi-Fi de invitados"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
msgid "Show QR code"
|
||||
msgstr "Mostrar el código QR"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr "Código QR Wi-Fi"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr "Descargar PDF"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr "El SSID no puede ser más largo que 32 símbolos"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "SSID can't be empty"
|
||||
msgstr "El SSID no puede estar vacío"
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr "El SSID no puede ser más largo que 32 bytes"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr "La contraseña debe contener al menos 8 símbolos"
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr "La contraseña no debe contener más de 63 símbolos"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:9
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:10
|
||||
msgid "802.11n - 20 MHz wide channel"
|
||||
msgstr "802.11n - ancho de canal de 20 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:11
|
||||
msgid "802.11n - 40 MHz wide channel"
|
||||
msgstr "802.11n - ancho de canal de 40 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:12
|
||||
msgid "802.11ac - 20 MHz wide channel"
|
||||
msgstr "802.11ac - ancho de canal de 20 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:13
|
||||
msgid "802.11ac - 40 MHz wide channel"
|
||||
msgstr "802.11ac - ancho de canal de 40 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:14
|
||||
msgid "802.11ac - 80 MHz wide channel"
|
||||
msgstr "802.11ac - ancho de canal de 80 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:15
|
||||
msgid "802.11ac - 160 MHz wide channel"
|
||||
msgstr "802.11ac - ancho de canal de 160 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:16
|
||||
msgid "802.11ax - 20 MHz wide channel"
|
||||
msgstr "802.11ax - ancho de canal de 20 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:17
|
||||
msgid "802.11ax - 40 MHz wide channel"
|
||||
msgstr "802.11ax - ancho de canal de 40 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:18
|
||||
msgid "802.11ax - 80 MHz wide channel"
|
||||
msgstr "802.11ax - ancho de canal de 80 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:19
|
||||
msgid "802.11ax - 160 MHz wide channel"
|
||||
msgstr "802.11ax - ancho de canal de 160 MHz"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:26
|
||||
msgid "WPA3 only"
|
||||
msgstr "WPA3 únicamente"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:27
|
||||
msgid "WPA3 with WPA2 as fallback (default)"
|
||||
msgstr "WPA3 con WPA2 como respaldo (por defecto)"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:28
|
||||
msgid "WPA2 only"
|
||||
msgstr "WPA2 únicamente"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:31
|
||||
msgid ""
|
||||
"SSID which contains non-standard characters could cause problems on some "
|
||||
"devices."
|
||||
msgstr ""
|
||||
"Un SSID que contiene caracteres no estándar puede causar problemas en "
|
||||
"ciertos dispositivos."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgstr "Clave pre-compartida WPA2/3, que es requerida para conectar a la red."
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
msgid "If set, network is not visible when scanning for available networks."
|
||||
msgstr "Si está definida, la red no es visible al escanear redes disponibles."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:40
|
||||
msgid ""
|
||||
@ -263,23 +228,14 @@ msgid ""
|
||||
"supported by all your devices. It usually has less interference, but the "
|
||||
"signal does not carry so well indoors."
|
||||
msgstr ""
|
||||
"La banda de 2.4 GHz es soportada por un mayor número de clientes, pero "
|
||||
"tiende a sufrir más interferencias. La banda de 5 GHz es un nuevo "
|
||||
"estándar y puede que no esté soportado por todos tus dispositivos. Aunque"
|
||||
" normalmente tiene sufre menos interferencias, la señal tiene un alcance "
|
||||
"limitado en interiores."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
"Cambia esto para ajustar el modo de operación 802.11n/ac/ax. 802.11n con "
|
||||
"un ancho de canal de 40 MHz puede producir un mayor rendimiento pero "
|
||||
"puede causar más interferencias en la red. Si no estás seguro de qué "
|
||||
"elegir, usa la opción por defecto con el ancho de canal de 20 MHz."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
msgid ""
|
||||
@ -289,11 +245,6 @@ msgid ""
|
||||
"router. Parameters of the guest network can be set in the Guest network "
|
||||
"tab."
|
||||
msgstr ""
|
||||
"Activa el Wi-Fi para invitados, que se encuentra aislado de la red local."
|
||||
" Los dispositivos conectados a esta red pueden acceder a internet, pero "
|
||||
"no pueden acceder a otros dispositivos o a la interfaz de configuración "
|
||||
"del router. Los parámetros de la red de invitados pueden configurarse en "
|
||||
"la pestaña de red de invitados."
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:49
|
||||
msgid ""
|
||||
@ -302,69 +253,65 @@ msgid ""
|
||||
"without WPA3 support require older WPA2. If you experience issues with "
|
||||
"connecting older devices, try to enable WPA2."
|
||||
msgstr ""
|
||||
"El estándar WPA3 es el nuevo método más seguro de cifrado que se aconseja"
|
||||
" utilizar con cualquier dispositivo que lo soporte. Los dispositivos más "
|
||||
"antiguos sin soporte para WPA3 necesitan utilizar WPA2. Si encuentras "
|
||||
"problemas al intentar conectar dispositivos antiguos, prueba a activar "
|
||||
"WPA2."
|
||||
|
||||
#: src/form/components/ForisForm.js:121
|
||||
msgid "Settings saved successfully"
|
||||
msgstr "Los ajustes se han guardado correctamente"
|
||||
msgstr "Configuraciòn salvada satisfactoriamente"
|
||||
|
||||
#: src/form/components/ForisForm.js:183
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
"Los cambios que has realizado podrían no haberse guardado. ¿Estás seguro "
|
||||
"de que quieres salir?"
|
||||
msgstr "Los cambios hechos podrìan no salvarse. Està seguro que quiere salir?"
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
#, fuzzy
|
||||
msgid "Updating"
|
||||
msgstr "Actualizando"
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
#, fuzzy
|
||||
msgid "Load settings"
|
||||
msgstr "Cargando los ajustes"
|
||||
msgstr "Cargando configuraciòn"
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
msgstr "Salvar"
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr "Se ha producido un error mientras se recuperaban los datos."
|
||||
msgstr "Error ocurrido mientras se recuperaban los datos."
|
||||
|
||||
#: src/utils/validations.js:13
|
||||
msgid "This is not a valid IPv4 address."
|
||||
msgstr "Esto no es una dirección IPv4 válida."
|
||||
msgstr "Esto no es una direcciòn IPv4 vàlida."
|
||||
|
||||
#: src/utils/validations.js:14
|
||||
msgid "This is not a valid IPv6 address."
|
||||
msgstr "Esto no es una dirección IPv6 válida."
|
||||
msgstr "Esto no es una direcciòn IPv6 vàlida."
|
||||
|
||||
#: src/utils/validations.js:15
|
||||
msgid "This is not a valid IPv6 prefix."
|
||||
msgstr "Esto no es un prefijo IPv6 válido."
|
||||
msgstr "Esto no es un prefijo IPv6 vàlido."
|
||||
|
||||
#: src/utils/validations.js:16
|
||||
msgid "This is not a valid domain name."
|
||||
msgstr "Esto no es un nombre de dominio válido."
|
||||
msgstr "Esto no es un nombre de dominio vàlido."
|
||||
|
||||
#: src/utils/validations.js:17
|
||||
#, fuzzy
|
||||
msgid "This is not a valid hostname."
|
||||
msgstr "Esto no es un nombre de dominio válido."
|
||||
msgstr "Esto no es un nombre de dominio vàlido."
|
||||
|
||||
#: src/utils/validations.js:18
|
||||
msgid "This is not a valid DUID."
|
||||
msgstr "Este no es un DUID válido."
|
||||
msgstr "Este no es un DUID vàlido."
|
||||
|
||||
#: src/utils/validations.js:19
|
||||
msgid "This is not a valid MAC address."
|
||||
msgstr "Esta no es una dirección MAC válida."
|
||||
msgstr "Esta no es una direcciòn MAC vàlida."
|
||||
|
||||
#: src/utils/validations.js:20
|
||||
msgid "Doesn't contain a list of emails separated by commas."
|
||||
msgstr "No contiene una lista de correos electrónicos separados por comas."
|
||||
msgstr "No contiene una lista de E-mails separados por comas."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
@ -430,19 +377,3 @@ msgstr "No contiene una lista de correos electrónicos separados por comas."
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "802.11n/ac mode"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change this to adjust 802.11n/ac mode"
|
||||
#~ " of operation. 802.11n with 40 MHz"
|
||||
#~ " wide channels can yield higher "
|
||||
#~ "throughput but can cause more "
|
||||
#~ "interference in the network. If you "
|
||||
#~ "don't know what to choose, use the"
|
||||
#~ " default option with 20 MHz wide "
|
||||
#~ "channel."
|
||||
#~ msgstr ""
|
||||
|
@ -1,22 +1,22 @@
|
||||
# Finnish translations for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: fi\n"
|
||||
"Language-Team: fi <LL@li.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -34,18 +34,6 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
@ -70,32 +58,32 @@ msgstr ""
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
@ -104,7 +92,7 @@ msgid "Hide SSID"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
@ -115,63 +103,48 @@ msgstr ""
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
msgid "Show QR code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr ""
|
||||
|
||||
@ -238,7 +211,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
@ -255,10 +228,10 @@ msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
@ -286,19 +259,19 @@ msgstr ""
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
msgid "Load settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr ""
|
||||
|
||||
@ -407,20 +380,3 @@ msgstr ""
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "802.11n/ac mode"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change this to adjust 802.11n/ac mode"
|
||||
#~ " of operation. 802.11n with 40 MHz"
|
||||
#~ " wide channels can yield higher "
|
||||
#~ "throughput but can cause more "
|
||||
#~ "interference in the network. If you "
|
||||
#~ "don't know what to choose, use the"
|
||||
#~ " default option with 20 MHz wide "
|
||||
#~ "channel."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -1,22 +1,22 @@
|
||||
# Faroese translations for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: fo\n"
|
||||
"Language-Team: fo <LL@li.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -34,18 +34,6 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
@ -70,32 +58,32 @@ msgstr ""
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
@ -104,7 +92,7 @@ msgid "Hide SSID"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
@ -115,63 +103,48 @@ msgstr ""
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
msgid "Show QR code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr ""
|
||||
|
||||
@ -238,7 +211,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
@ -255,10 +228,10 @@ msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
@ -286,19 +259,19 @@ msgstr ""
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
msgid "Load settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr ""
|
||||
|
||||
@ -407,20 +380,3 @@ msgstr ""
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "802.11n/ac mode"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change this to adjust 802.11n/ac mode"
|
||||
#~ " of operation. 802.11n with 40 MHz"
|
||||
#~ " wide channels can yield higher "
|
||||
#~ "throughput but can cause more "
|
||||
#~ "interference in the network. If you "
|
||||
#~ "don't know what to choose, use the"
|
||||
#~ " default option with 20 MHz wide "
|
||||
#~ "channel."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -1,21 +1,21 @@
|
||||
# Translations template for Foris JS.
|
||||
# Copyright (C) 2024 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
|
||||
# This file is distributed under the same license as the Foris JS project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Foris JS 6.1.0\n"
|
||||
"Project-Id-Version: Foris JS 5.2.0\n"
|
||||
"Report-Msgid-Bugs-To: tech.support@turris.cz\n"
|
||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
||||
"POT-Creation-Date: 2022-02-22 16:41+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: src/api/utils.js:61
|
||||
msgid "The session is expired. Please log in again."
|
||||
@ -33,18 +33,6 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copied!"
|
||||
msgstr ""
|
||||
|
||||
#: src/bootstrap/CopyInput.js:57
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:27
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
@ -69,32 +57,32 @@ msgstr ""
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
|
||||
msgid "An error occurred during resetting Wi-Fi settings."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
|
||||
msgid "Wi-Fi settings are set to defaults."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
|
||||
msgid "Reset Wi-Fi Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
|
||||
msgid ""
|
||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||
"and restore the default values."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||
#: src/common/WiFiSettings/WiFiForm.js:95
|
||||
msgid "Wi-Fi ${deviceID + 1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:80
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
@ -103,7 +91,7 @@ msgid "Hide SSID"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:186
|
||||
msgid "802.11n/ac/ax mode"
|
||||
msgid "802.11n/ac mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:199
|
||||
@ -114,63 +102,48 @@ msgstr ""
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:226
|
||||
msgid "Disable Management Frame Protection"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:227
|
||||
msgid ""
|
||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||
"Management Frame Protection."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||
#: src/common/WiFiSettings/WiFiForm.js:243
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||
#: src/common/WiFiSettings/WiFiForm.js:284
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||
#: src/common/WiFiSettings/WiFiGuestForm.js:42
|
||||
msgid "Enable Guest Wi-Fi"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||
msgid "Show QR code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:71
|
||||
msgid "Wi-Fi QR Code"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
||||
#: src/common/WiFiSettings/WiFiQRCode.js:91
|
||||
msgid "Download PDF"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:83
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:99
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:78
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:94
|
||||
msgid "SSID can't be longer than 32 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:79
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:96
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:81
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:98
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:84
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:101
|
||||
msgid "SSID can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:103
|
||||
msgid "SSID can't be longer than 32 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:89
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:106
|
||||
msgid "Password must contain at least 8 symbols"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:86
|
||||
#: src/common/WiFiSettings/WiFiSettings.js:105
|
||||
msgid "Password must not contain more than 63 symbols"
|
||||
msgstr ""
|
||||
|
||||
@ -237,7 +210,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:34
|
||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
||||
msgid "WPA2 pre-shared key, that is required to connect to the network."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:37
|
||||
@ -254,10 +227,10 @@ msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:43
|
||||
msgid ""
|
||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
||||
"MHz wide channels can yield higher throughput but can cause more "
|
||||
"interference in the network. If you don't know what to choose, use the "
|
||||
"default option with 20 MHz wide channel."
|
||||
"Change this to adjust 802.11n/ac mode of operation. 802.11n with 40 MHz "
|
||||
"wide channels can yield higher throughput but can cause more interference"
|
||||
" in the network. If you don't know what to choose, use the default option"
|
||||
" with 20 MHz wide channel."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/WiFiSettings/constants.js:46
|
||||
@ -285,19 +258,19 @@ msgstr ""
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
#: src/form/components/SubmitButton.js:31
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
#: src/form/components/SubmitButton.js:34
|
||||
msgid "Load settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
#: src/form/components/SubmitButton.js:37
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: src/utils/ErrorMessage.js:17
|
||||
#: src/utils/ErrorMessage.js:16
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr ""
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user