1
0
mirror of https://gitlab.nic.cz/turris/reforis/foris-js.git synced 2025-06-15 13:36:35 +02:00

Compare commits

...

90 Commits

Author SHA1 Message Date
c0fd0adbc9 Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!248
2024-09-27 15:48:49 +02:00
1ec0a26199 Merge branch 'bump-version-630' into 'dev'
Bump v6.3.0

See merge request turris/reforis/foris-js!247
2024-09-27 15:39:42 +02:00
76e37b738a Bump v6.3.0
* Add ThreeDotsMenu component
* Refactor EmailInput description
* Refactor RadioSet & ignore Radio component
* Refactor npm package badge in introduction.md
* NPM audit fix
2024-09-27 15:36:10 +02:00
8a69d14429 NPM audit fix 2024-09-27 15:35:45 +02:00
4d5395c826 Add ThreeDotsMenu component to index.js 2024-09-27 15:29:46 +02:00
1fb83e08ea Merge branch 'add-threedotsmenu-component' into 'dev'
Add ThreeDotsMenu component

See merge request turris/reforis/foris-js!246
2024-09-27 15:17:55 +02:00
e6cfc6dbb0 docs: Refactor npm package badge in introduction.md 2024-09-27 15:13:29 +02:00
a93a64bf96 docs: Refactor EmailInput description 2024-09-27 15:13:28 +02:00
1ab77decfd docs: Refactor RadioSet & ignore Radio component 2024-09-27 15:13:28 +02:00
b6e1e0adae Add ThreeDotsMenu component
ThreeDotsMenu Bootstrap component is a dropdown menu
that appears when the user clicks on three dots.

It is used to display a list of actions that can be
performed on a particular item.
2024-09-27 15:13:12 +02:00
a7a4e76cd1 Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!245
2024-09-25 16:22:09 +02:00
e7758cab9a Merge branch 'bump-version-621' into 'dev'
Bump v6.2.1

See merge request turris/reforis/foris-js!243
2024-09-25 16:20:01 +02:00
bf88b76613 Bump v6.2.1
* Add & update Weblate translations
* Refactor CopyInput component
* Refactor ForisURLs to include new URLs for Overview page
2024-09-25 16:15:56 +02:00
3cf85a9516 Merge branch 'update-translations' into 'dev'
Add & update Weblate translations

See merge request turris/reforis/foris-js!244
2024-09-25 16:14:48 +02:00
7c8442300a Update translation messages 2024-09-25 16:11:22 +02:00
e849397aa2 Create translation messages 2024-09-25 16:11:07 +02:00
c1b44d498c Translated using Weblate (Czech)
Currently translated at 100.0% (71 of 71 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/cs/
2024-09-25 10:15:45 +00:00
1b5a5da953 Merge branch 'add-overview-links' into 'dev'
Refactor ForisURLs to include new URLs for Overview page

See merge request turris/reforis/foris-js!242
2024-09-24 13:19:55 +02:00
7f45201f05 Refactor ForisURLs to include new URLs for Overview page 2024-09-23 17:09:13 +02:00
f34d9bbdbd Merge branch 'fix-copy-input' into 'dev'
Refactor CopyInput component

See merge request turris/reforis/foris-js!241
2024-09-23 14:07:06 +02:00
c7ff3f42f6 Refactor CopyInput component
Remove unnecessary input-group-append div and simplify structure
2024-09-23 13:59:31 +02:00
a1036514dd Translated using Weblate (Slovak)
Currently translated at 100.0% (71 of 71 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/sk/
2024-09-20 14:06:15 +02:00
a352f12279 Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!240
2024-09-20 14:06:10 +02:00
acfbeb2c43 Merge branch 'bump-version-620' into 'dev'
Bump v6.2.0

See merge request turris/reforis/foris-js!239
2024-09-20 13:51:48 +02:00
3bef624ce4 Bump v6.2.0
* Add useFocusTrap hook
* Add extendSession endpoint
* Refactor Spinner.css to use CSS variable for color
* Refactor Modal component to use useFocusTrap hook
* Refactor Alert component to use useFocusTrap hook
2024-09-20 13:36:45 +02:00
7d0d52666d Merge branch 'add-extend-session-url' into 'dev'
Add extendSession endpoint ot ForisURLs

See merge request turris/reforis/foris-js!238
2024-09-20 13:27:22 +02:00
52fe5d65a6 Refactor Spinner.css to use CSS variable for color 2024-09-20 13:23:01 +02:00
b99add91cf Refactor ForisURLs.js to add extendSession endpoint 2024-09-20 13:23:01 +02:00
b7a4613cf4 Merge branch 'modal-focus-trap' into 'dev'
Introduce useFocusTrap hook and refactor Modal & Alert components

See merge request turris/reforis/foris-js!237
2024-09-19 13:18:26 +02:00
9e2278e016 Update Snapshots 2024-09-17 14:33:41 +02:00
83a6ff75f6 Refactor Alert component to use useFocusTrap hook 2024-09-17 14:33:19 +02:00
02f3803265 Refactor Modal component to use useFocusTrap hook 2024-09-17 14:13:26 +02:00
bb559cbe53 Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!236
2024-08-30 16:03:17 +02:00
c86e2c8944 Merge branch 'bump-611' into 'dev'
Bump v6.1.1

See merge request turris/reforis/foris-js!235
2024-08-30 16:00:56 +02:00
b96ccde81c Bump v6.1.1
* Add & updated Weblate translations
* Update icon color classes to use "text-secondary" instead of "text-dark"
* Update Wi-Fi QRCodeModal component to use new styles & add close button
* Refactore WiFiGuestForm component to get rid of obsolete div element
* NPM audit fix
2024-08-30 15:56:08 +02:00
cfa6eade17 NPM audit fix 2024-08-30 15:51:23 +02:00
380a388a38 Merge branch 'fix-icons-color' into 'dev'
Update icon color classes & refactoring

See merge request turris/reforis/foris-js!233
2024-08-30 15:49:45 +02:00
cc19b4b293 Update Snapshots 2024-08-30 15:46:45 +02:00
e7ec494bb2 Update Wi-Fi QRCodeModal component to use new button styles & add close button 2024-08-30 15:46:45 +02:00
ea590e443c Refactor WiFiGuestForm component to get rid of obsolete "input-group-append" div element 2024-08-30 15:46:45 +02:00
b127bf5edf Update icon color classes to use "text-secondary" instead of "text-dark" 2024-08-30 15:46:45 +02:00
40e4a9a4e3 Merge branch 'update-translations' into 'dev'
Add & update Weblate translations

See merge request turris/reforis/foris-js!234
2024-08-30 15:44:51 +02:00
bcb7c43863 Translated using Weblate (Spanish)
Currently translated at 100.0% (71 of 71 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/es/
2024-08-24 15:09:22 +02:00
c809817283 Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!232
2024-08-23 14:22:50 +02:00
a429b7c1bf Merge branch 'bump-version-610' into 'dev'
Bump v6.1.0

See merge request turris/reforis/foris-js!231
2024-08-23 14:19:24 +02:00
4e6f6e7413 Bump v6.1.0
* Add & update  Weblate translations
* Migrate to Font Awesome v6
* NPM audit fix
2024-08-23 14:03:48 +02:00
e6356de57f NPM audit fix 2024-08-23 14:03:48 +02:00
d4a71c346c Update translation messages 2024-08-23 14:03:48 +02:00
eb9582db96 Create translation messages 2024-08-23 14:03:47 +02:00
036f191949 Merge branch 'update-translations' into 'dev'
Add & update Weblate translations

See merge request turris/reforis/foris-js!230
2024-08-23 13:42:58 +02:00
2f73516384 Merge branch 'migrate-to-fontawesome-v6' into 'dev'
Migrate to FontAwesome v6

See merge request turris/reforis/foris-js!229
2024-08-22 16:10:21 +02:00
b97ba379ec Update Snapshots 2024-08-22 16:05:41 +02:00
5f1372bb37 Migrate to FontAwesome v6 2024-08-22 16:05:40 +02:00
7c9cd9451b Translated using Weblate (French)
Currently translated at 82.6% (57 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/fr/
2024-07-27 03:09:24 +02:00
7e0752fc17 Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!228
2024-07-26 16:12:26 +02:00
4c5aeed26e Merge branch 'bump-603' into 'dev'
Bump v6.0.3

See merge request turris/reforis/foris-js!227
2024-07-26 16:08:09 +02:00
d90e39a570 Bump v6.0.3
* Update WiFiQRCode component
2024-07-26 17:06:38 +03:00
2e2f326ade Merge branch 'wifi-qr-icon' into 'dev'
Update WiFiQRCode component

See merge request turris/reforis/foris-js!226
2024-07-26 14:26:00 +02:00
541ca7a784 Update WiFiQRCode component
Remove custom QR icon image with a standard fontawesome icon
2024-07-25 17:31:30 +03:00
8e0c60a576 Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!225
2024-06-28 14:22:41 +02:00
928cf716d6 Merge branch 'bump-602' into 'dev'
Bump v6.0.2

See merge request turris/reforis/foris-js!224
2024-06-28 13:08:32 +02:00
bd8d5bc8cb Bump v6.0.2
* Add className prop to CheckBox and Radio components
2024-06-28 14:03:19 +03:00
804e0022eb Update Snapshots 2024-06-28 10:30:25 +03:00
d69398ac06 Add className prop to CheckBox and Radio components 2024-06-28 10:29:41 +03:00
e297410f16 Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!223
2024-06-26 15:05:29 +02:00
17e5a959f7 Merge branch 'bump-601' into 'dev'
Bump v6.0.1

See merge request turris/reforis/foris-js!222
2024-06-26 15:00:58 +02:00
3b48510246 Bump v6.0.1
* Add className prop to Switch component
* Update dependencies in package.json
* NPM audit fix
2024-06-26 15:59:26 +03:00
8bac4f18f4 NPM audit fix 2024-06-26 15:57:31 +03:00
6cb2a5388e Update dependencies in package.json
Update Webpack and Prettier to latest versions
2024-06-26 15:52:57 +03:00
0b02bead71 Merge branch 'add-classname-prop-to-switch' into 'dev'
Add className prop to Switch

See merge request turris/reforis/foris-js!221
2024-06-26 14:24:49 +02:00
12c6d05ca6 Update Snapshots 2024-06-26 14:11:54 +03:00
923bbab6d5 Add className prop to Switch component 2024-06-26 14:11:16 +03:00
0ea5d43c75 Merge branch 'dev' into 'master'
Bump v6.0.0

See merge request turris/reforis/foris-js!220
2024-06-11 14:29:46 +02:00
c209796118 Merge branch 'bump-version-600' into 'dev'
Bump v6.0.0

See merge request turris/reforis/foris-js!219
2024-06-11 14:10:20 +02:00
bf7e5303e9 Bump v6.0.0
* Add CHANGELOG.md
* Add JS_DIR variable to Makefile
* Add support for shared reForis ESLint configuration
* Update dependencies in package.json
* Update Spinner.css styles for better positioning and responsiveness
* Migrate to Bootstrap 5
* NPM audit fix
* Other small improvements
2024-06-11 14:02:24 +02:00
59b3130277 Add CHANGELOG.md 2024-06-10 18:03:41 +02:00
4ca07dceb0 Fix tests 2024-06-10 16:28:25 +02:00
912f8facdb Fix linting issues 2024-06-10 16:28:25 +02:00
42fb16d066 Update Snapshots 2024-06-10 16:28:24 +02:00
cd9eb80e9c NPM audit fix 2024-06-10 16:28:24 +02:00
5a77a22755 Update dependencies in package.json 2024-06-10 16:28:23 +02:00
3fa5ab7c07 Merge branch 'remove-use-tooltip-hook' into 'dev'
Remove useTooltip hook

See merge request turris/reforis/foris-js!218
2024-04-30 13:39:29 +02:00
ff48d6ca36 Remove useTooltip hook 2024-04-30 13:37:25 +02:00
39257567d4 Merge branch 'update-bootstrap' into 'dev'
Update Bootstrap library to version 5.3.x

See merge request turris/reforis/foris-js!217
2024-04-29 15:28:09 +02:00
5ed48bf2a3 Update Snapshots 2024-04-29 15:19:22 +02:00
c8fbdc5bba Fix tests 2024-04-29 15:19:21 +02:00
46bd8edcea Add JS_DIR variable to Makefile 2024-04-29 15:19:20 +02:00
42fcc02d83 Update Bootstrap library to version 5.3.x 2024-04-29 15:19:20 +02:00
96785f0774 Merge branch 'fix-fullscreen-spinner' into 'dev'
Update Spinner.css styles for better positioning and responsiveness

See merge request turris/reforis/foris-js!216
2024-04-10 15:35:27 +02:00
7823bff6d9 Update Spinner.css styles for better positioning and responsiveness 2024-04-10 14:46:18 +02:00
109 changed files with 15985 additions and 16503 deletions

View File

@ -1,8 +1,3 @@
module.exports = {
extends: ["eslint-config-reforis", "prettier"],
plugins: ["prettier"],
rules: {
"prettier/prettier": ["error"],
"import/prefer-default-export": "off",
},
extends: "eslint-config-reforis",
};

View File

@ -1,11 +0,0 @@
{
"singleQuote": false,
"printWidth": 80,
"proseWrap": "always",
"tabWidth": 4,
"useTabs": false,
"trailingComma": "es5",
"bracketSpacing": true,
"jsxBracketSameLine": false,
"semi": true
}

470
CHANGELOG.md Normal file
View File

@ -0,0 +1,470 @@
# 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.3.0] - 2024-09-27
### Added
- Added ThreeDotsMenu component
### Changed
- Refactored EmailInput description
- Refactored RadioSet & ignore Radio component
- Refactored npm package badge in introduction.md
- NPM audit fix
## [6.2.1] - 2024-09-25
### Added
- Added & updated Weblate translations
### Changed
- Refactored CopyInput component
- Refactored ForisURLs to include new URLs for Overview page
## [6.2.0] - 2024-09-20
### Added
- Added useFocusTrap hook
- Added extendSession endpoint
### Changed
- Refactored Spinner.css to use CSS variable for color
- Refactored Modal component to use useFocusTrap hook
- Refactored Alert component to use useFocusTrap hook
## [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.3.0...dev
[6.3.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.2.1...v6.3.0
[6.2.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.2.0...v6.2.1
[6.2.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.1...v6.2.0
[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

View File

@ -11,6 +11,7 @@ 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

View File

@ -33,5 +33,4 @@ To install a specific version:
npm install foris@version
```
<a target="_blank" href="https://www.npmjs.com/package/foris">Check
on<img width="100px" src="./docs/forisjs-npm.svg"></a>
[![npm version](https://badge.fury.io/js/foris.svg)](https://badge.fury.io/js/foris)

View File

@ -19,6 +19,7 @@ module.exports = {
collectCoverageFrom: ["src/**/*.{js,jsx}"],
coverageDirectory: "coverage",
testPathIgnorePatterns: ["/node_modules/", "/__fixtures__/", "/dist/"],
testEnvironment: "jsdom",
verbose: false,
setupFilesAfterEnv: [
"@testing-library/react/cleanup-after-each",

27982
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "foris",
"version": "5.6.1",
"version": "6.3.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,49 +14,51 @@
"license": "GPL-3.0",
"main": "./src/index.js",
"dependencies": {
"axios": "^0.21.1",
"immutability-helper": "3.0.1",
"moment": "^2.24.0",
"qrcode.react": "^1.0.1",
"react-datetime": "^3.1.1",
"react-uid": "^2.2.0"
"@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"
},
"peerDependencies": {
"bootstrap": "^4.6.2",
"bootstrap": "^5.3.3",
"prop-types": "15.8.1",
"react": "16.9.0",
"react-dom": "16.9.0",
"react-router-dom": "^5.1.2"
},
"devDependencies": {
"@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",
"@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",
"@testing-library/react": "^8.0.9",
"babel-loader": "^8.1.0",
"babel-polyfill": "^6.26.0",
"bootstrap": "^4.6.2",
"bootstrap": "^5.3.3",
"css-loader": "^5.2.4",
"eslint": "^6.8.0",
"eslint-config-prettier": "^6.11.0",
"eslint-config-reforis": "^1.0.0",
"eslint-plugin-prettier": "^3.1.4",
"eslint": "^8.57.0",
"eslint-config-reforis": "^2.1.1",
"file-loader": "^6.0.0",
"jest": "^25.2.0",
"jest-mock-axios": "^3.2.0",
"moment-timezone": "^0.5.34",
"prettier": "2.0.5",
"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",
"react": "16.9.0",
"react-dom": "16.9.0",
"react-router-dom": "^5.1.2",
"react-styleguidist": "^11.2.0",
"snapshot-diff": "^0.7.0",
"react-styleguidist": "^12.0.1",
"snapshot-diff": "^0.10.0",
"style-loader": "^1.2.1",
"webpack": "^5.68.0"
"webpack": "^5.92.1"
},
"scripts": {
"lint": "eslint src",

1
prettier.config.js Normal file
View File

@ -0,0 +1 @@
module.exports = require("eslint-config-reforis/prettier.config");

View File

@ -111,9 +111,8 @@ const useAPIPatch = createAPIHook("PATCH");
const useAPIPut = createAPIHook("PUT");
const useAPIDelete = createAPIHook("DELETE");
export { useAPIGet, useAPIPost, useAPIPatch, useAPIPut, useAPIDelete };
export function useAPIPolling(endpoint, delay = 1000, until) {
/* eslint-disable default-param-last */
function useAPIPolling(endpoint, delay = 1000, until) {
// delay ms
const [state, setState] = useState({ state: API_STATE.INIT });
const [getResponse, get] = useAPIGet(endpoint);
@ -133,3 +132,12 @@ export function useAPIPolling(endpoint, delay = 1000, until) {
return [state];
}
export {
useAPIGet,
useAPIPost,
useAPIPatch,
useAPIPut,
useAPIDelete,
useAPIPolling,
};

View File

@ -1,13 +1,16 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 from "react";
import React, { useRef } from "react";
import PropTypes from "prop-types";
import { useFocusTrap } from "../utils/hooks";
export const ALERT_TYPES = Object.freeze({
PRIMARY: "primary",
SECONDARY: "secondary",
@ -35,21 +38,28 @@ Alert.defaultProps = {
type: ALERT_TYPES.DANGER,
};
export function Alert({ type, onDismiss, children }) {
function Alert({ type, onDismiss, children }) {
const alertRef = useRef();
useFocusTrap(alertRef, !!onDismiss);
return (
<div
className={`alert ${
ref={alertRef}
className={`alert alert-${type} ${
onDismiss ? "alert-dismissible" : ""
} alert-${type}`}
}`.trim()}
role="alert"
>
{onDismiss ? (
<button type="button" className="close" onClick={onDismiss}>
&times;
</button>
) : (
false
{onDismiss && (
<button
type="button"
className="btn-close"
onClick={onDismiss}
aria-label={_("Close")}
/>
)}
{children}
</div>
);
}
export default Alert;

View File

@ -1,11 +1,12 @@
/*
* Copyright (C) 2019-2023 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* 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 from "react";
import PropTypes from "prop-types";
Button.propTypes = {
@ -24,16 +25,10 @@ Button.propTypes = {
]).isRequired,
};
export function Button({
className,
loading,
forisFormSize,
children,
...props
}) {
function Button({ className, loading, forisFormSize, children, ...props }) {
let buttonClass = className ? `btn ${className}` : "btn btn-primary";
if (forisFormSize) {
buttonClass = `${buttonClass} col-sm-12 col-md-3 col-lg-2`;
buttonClass = `${buttonClass} col-12 col-md-3 col-lg-2`;
}
return (
@ -44,7 +39,7 @@ export function Button({
>
{loading && (
<span
className="spinner-border spinner-border-sm mr-1"
className="spinner-border spinner-border-sm me-1"
role="status"
aria-hidden="true"
/>
@ -53,3 +48,5 @@ export function Button({
</button>
);
}
export default Button;

View File

@ -1,11 +1,12 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 from "react";
import PropTypes from "prop-types";
import { useUID } from "react-uid";
@ -16,33 +17,36 @@ CheckBox.propTypes = {
helpText: PropTypes.string,
/** Control if checkbox is clickable */
disabled: PropTypes.bool,
/** Additional class name */
className: PropTypes.string,
};
CheckBox.defaultProps = {
disabled: false,
};
export function CheckBox({ label, helpText, disabled, ...props }) {
function CheckBox({ label, helpText, disabled, className, ...props }) {
const uid = useUID();
return (
<div className="form-group">
<div className="custom-control custom-checkbox ">
<div className={`${className || "mb-3"} form-check`.trim()}>
<input
className="custom-control-input"
className="form-check-input"
type="checkbox"
id={uid}
disabled={disabled}
{...props}
/>
<label className="custom-control-label" htmlFor={uid}>
<label className="form-check-label" htmlFor={uid}>
{label}
{helpText && (
<small className="form-text text-muted">
{helpText}
</small>
)}
</label>
{helpText && (
<div className="form-text">
<small>{helpText}</small>
</div>
)}
</div>
);
}
export default CheckBox;

View File

@ -1,13 +1,15 @@
/*
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* 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";
import Input from "./Input";
CopyInput.propTypes = {
/** Field label. */
@ -22,7 +24,7 @@ CopyInput.propTypes = {
readOnly: PropTypes.bool,
};
export function CopyInput({ value, ...props }) {
function CopyInput({ value, ...props }) {
const inputTextRef = useRef();
const [isCopied, setIsCopied] = useState(false);
@ -46,7 +48,6 @@ export function CopyInput({ value, ...props }) {
return (
<Input type="text" value={value} ref={inputTextRef} {...props}>
<div className="input-group-append">
<button
className="btn btn-outline-secondary"
type="button"
@ -54,7 +55,8 @@ export function CopyInput({ value, ...props }) {
>
<span>{isCopied ? _("Copied!") : _("Copy")}</span>
</button>
</div>
</Input>
);
}
export default CopyInput;

View File

@ -1,18 +1,19 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 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. */
@ -37,7 +38,7 @@ DataTimeInput.propTypes = {
const DEFAULT_DATE_FORMAT = "YYYY-MM-DD";
const DEFAULT_TIME_FORMAT = "HH:mm:ss";
export function DataTimeInput({
function DataTimeInput({
value,
onChange,
isValidDate,
@ -46,13 +47,13 @@ export function DataTimeInput({
children,
...props
}) {
function renderInput(datetimeProps) {
const renderInput = (datetimeProps) => {
return (
<Input {...props} {...datetimeProps}>
{children}
</Input>
);
}
};
return (
<Datetime
@ -70,3 +71,5 @@ export function DataTimeInput({
/>
);
}
export default DataTimeInput;

View File

@ -1,11 +1,12 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 from "react";
import PropTypes from "prop-types";
DownloadButton.propTypes = {
@ -21,7 +22,7 @@ DownloadButton.defaultProps = {
className: "btn-primary",
};
export function DownloadButton({ href, className, children, ...props }) {
function DownloadButton({ href, className, children, ...props }) {
return (
<a
href={href}
@ -33,3 +34,5 @@ export function DownloadButton({ href, className, children, ...props }) {
</a>
);
}
export default DownloadButton;

View File

@ -6,11 +6,14 @@
*/
import React from "react";
import PropTypes from "prop-types";
import { Input } from "./Input";
import Input from "./Input";
export const EmailInput = ({ ...props }) => <Input type="email" {...props} />;
function EmailInput({ ...props }) {
return <Input type="email" {...props} />;
}
EmailInput.propTypes = {
/** Field label. */
@ -22,3 +25,5 @@ EmailInput.propTypes = {
/** Email value. */
value: PropTypes.string,
};
export default EmailInput;

View File

@ -6,6 +6,7 @@ All additional `props` are passed to the `<input type="email">` HTML component.
```js
import { useState } from "react";
import Button from "./Button";
const [email, setEmail] = useState("Wrong email");
<form onSubmit={(e) => e.preventDefault()}>
<EmailInput
@ -14,6 +15,6 @@ const [email, setEmail] = useState("Wrong email");
helpText="Read the small text!"
onChange={(event) => setEmail(event.target.value)}
/>
<button type="submit">Try to submit</button>
<Button type="submit">Try to submit</Button>
</form>;
```

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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.
@ -8,7 +8,8 @@
import React from "react";
import PropTypes from "prop-types";
import { Input } from "./Input";
import Input from "./Input";
FileInput.propTypes = {
/** Field label. */
@ -23,7 +24,7 @@ FileInput.propTypes = {
multiple: PropTypes.bool,
};
export function FileInput({ ...props }) {
function FileInput({ ...props }) {
return (
<Input
type="file"
@ -34,3 +35,5 @@ export function FileInput({ ...props }) {
/>
);
}
export default FileInput;

View File

@ -6,11 +6,12 @@
*/
import React, { forwardRef } from "react";
import { useUID } from "react-uid";
import PropTypes from "prop-types";
import { useUID } from "react-uid";
/** Base bootstrap input component. */
export const Input = forwardRef(
const Input = forwardRef(
(
{
type,
@ -27,18 +28,21 @@ export const Input = forwardRef(
) => {
const uid = useUID();
const inputClassName = `form-control ${className || ""} ${
const inputClassName = `${className || ""} ${
error ? "is-invalid" : ""
}`.trim();
return (
<div className="form-group">
<label className={labelClassName} htmlFor={uid}>
<div className="mb-3">
<label
className={`form-label ${labelClassName || ""}`.trim()}
htmlFor={uid}
>
{label}
</label>
<div className={`input-group ${groupClassName || ""}`.trim()}>
<input
className={inputClassName}
className={`form-control ${inputClassName}`.trim()}
type={type}
id={uid}
ref={ref}
@ -46,15 +50,19 @@ export const Input = forwardRef(
/>
{children}
</div>
{error ? <div className="invalid-feedback">{error}</div> : null}
{helpText ? (
<small className="form-text text-muted">{helpText}</small>
) : null}
{error && <div className="invalid-feedback">{error}</div>}
{helpText && (
<div className="form-text">
<small>{helpText}</small>
</div>
)}
</div>
);
}
);
Input.displayName = "Input";
Input.propTypes = {
type: PropTypes.string.isRequired,
label: PropTypes.string.isRequired,
@ -68,3 +76,5 @@ Input.propTypes = {
labelClassName: PropTypes.string,
groupClassName: PropTypes.string,
};
export default Input;

View File

@ -1,15 +1,16 @@
/*
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* Copyright (C) 2020-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, { useRef, useEffect } from "react";
import PropTypes from "prop-types";
import { Portal } from "../utils/Portal";
import { useClickOutside } from "../utils/hooks";
import { useClickOutside, useFocusTrap } from "../utils/hooks";
import Portal from "../utils/Portal";
import "./Modal.css";
Modal.propTypes = {
@ -28,10 +29,11 @@ Modal.propTypes = {
};
export function Modal({ shown, setShown, scrollable, size, children }) {
const dialogRef = useRef();
const modalRef = useRef();
let modalSize = "modal-";
useClickOutside(dialogRef, () => setShown(false));
useClickOutside(modalRef, () => setShown(false));
useFocusTrap(modalRef, shown);
useEffect(() => {
const handleEsc = (event) => {
@ -64,11 +66,13 @@ export function Modal({ shown, setShown, scrollable, size, children }) {
return (
<Portal containerId="modal-container">
<div
ref={modalRef}
className={`modal fade ${shown ? "show" : ""}`.trim()}
role="dialog"
aria-modal="true"
aria-labelledby="modal-title"
>
<div
ref={dialogRef}
className={`${modalSize.trim()} modal-dialog modal-dialog-centered ${
scrollable ? "modal-dialog-scrollable" : ""
}`.trim()}
@ -89,14 +93,13 @@ ModalHeader.propTypes = {
export function ModalHeader({ setShown, title }) {
return (
<div className="modal-header">
<h5 className="modal-title">{title}</h5>
<h1 className="modal-title fs-5">{title}</h1>
<button
type="button"
className="close"
className="btn-close"
onClick={() => setShown(false)}
>
<span aria-hidden="true">&times;</span>
</button>
aria-label={_("Close")}
/>
</div>
);
}

View File

@ -1,15 +1,18 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 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 = {
@ -23,7 +26,7 @@ NumberInput.propTypes = {
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
/** Function called when value changes. */
onChange: PropTypes.func.isRequired,
/** Additional description dispaled to the right of input value. */
/** Additional description displayed to the right of input value. */
inlineText: PropTypes.string,
};
@ -31,7 +34,7 @@ NumberInput.defaultProps = {
value: 0,
};
export function NumberInput({ onChange, inlineText, value, ...props }) {
function NumberInput({ onChange, inlineText, value, ...props }) {
function updateValue(initialValue, difference) {
onChange({ target: { value: initialValue + difference } });
}
@ -49,8 +52,9 @@ export function NumberInput({ onChange, inlineText, value, ...props }) {
return (
<Input type="number" onChange={onChange} value={value} {...props}>
<div className="input-group-append">
{inlineText && <p className="input-group-text">{inlineText}</p>}
{inlineText && (
<span className="input-group-text">{inlineText}</span>
)}
<button
type="button"
className="btn btn-outline-secondary"
@ -58,7 +62,7 @@ export function NumberInput({ onChange, inlineText, value, ...props }) {
onMouseUp={() => enableIncrease(false)}
aria-label="Increase"
>
<i className="fas fa-plus" />
<FontAwesomeIcon icon={faPlus} />
</button>
<button
type="button"
@ -67,9 +71,10 @@ export function NumberInput({ onChange, inlineText, value, ...props }) {
onMouseUp={() => enableDecrease(false)}
aria-label="Decrease"
>
<i className="fas fa-minus" />
<FontAwesomeIcon icon={faMinus} />
</button>
</div>
</Input>
);
}
export default NumberInput;

View File

@ -1,14 +1,17 @@
/*
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* 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 } 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. */
@ -25,7 +28,7 @@ PasswordInput.propTypes = {
newPass: PropTypes.bool,
};
export function PasswordInput({ withEye, newPass, ...props }) {
function PasswordInput({ withEye, newPass, ...props }) {
const [isHidden, setHidden] = useState(true);
return (
@ -34,8 +37,7 @@ export function PasswordInput({ withEye, newPass, ...props }) {
autoComplete={newPass ? "new-password" : "current-password"}
{...props}
>
{withEye ? (
<div className="input-group-append">
{withEye && (
<button
type="button"
className="input-group-text"
@ -44,14 +46,15 @@ export function PasswordInput({ withEye, newPass, ...props }) {
setHidden((shouldBeHidden) => !shouldBeHidden);
}}
>
<i
className={`fa ${
isHidden ? "fa-eye" : "fa-eye-slash"
}`}
<FontAwesomeIcon
icon={isHidden ? faEye : faEyeSlash}
style={{ width: "1.25rem" }}
className="text-secondary"
/>
</button>
</div>
) : null}
)}
</Input>
);
}
export default PasswordInput;

48
src/bootstrap/Radio.js Normal file
View File

@ -0,0 +1,48 @@
/*
* Copyright (C) 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 from "react";
import PropTypes from "prop-types";
Radio.propTypes = {
label: PropTypes.oneOfType([
PropTypes.string,
PropTypes.element,
PropTypes.node,
PropTypes.arrayOf(PropTypes.node),
]).isRequired,
id: PropTypes.string.isRequired,
inline: PropTypes.bool,
helpText: PropTypes.string,
className: PropTypes.string,
};
function Radio({ label, id, helpText, inline, className, ...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}
{helpText && (
<div className="form-text">
<small>{helpText}</small>
</div>
)}
</label>
</div>
);
}
export default Radio;

View File

@ -1,14 +1,17 @@
/*
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* Copyright (C) 2020-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 from "react";
import PropTypes from "prop-types";
import { useUID } from "react-uid";
import Radio from "./Radio";
RadioSet.propTypes = {
/** Name attribute of the input HTML tag. */
name: PropTypes.string.isRequired,
@ -17,7 +20,7 @@ RadioSet.propTypes = {
/** Choices . */
choices: PropTypes.arrayOf(
PropTypes.shape({
/** Choice lable . */
/** Choice label . */
label: PropTypes.oneOfType([
PropTypes.string,
PropTypes.element,
@ -36,15 +39,7 @@ RadioSet.propTypes = {
inline: PropTypes.bool,
};
export function RadioSet({
name,
label,
choices,
value,
helpText,
inline,
...props
}) {
function RadioSet({ name, label, choices, value, helpText, inline, ...props }) {
const uid = useUID();
const radios = choices.map((choice, key) => {
const id = `${name}-${key}`;
@ -64,7 +59,7 @@ export function RadioSet({
});
return (
<div className="form-group">
<div className="mb-3">
{label && (
<label htmlFor={uid} className="d-block">
{label}
@ -72,47 +67,12 @@ export function RadioSet({
)}
{radios}
{helpText && (
<small className="form-text text-muted">{helpText}</small>
<div className="form-text">
<small>{helpText}</small>
</div>
)}
</div>
);
}
Radio.propTypes = {
label: PropTypes.oneOfType([
PropTypes.string,
PropTypes.element,
PropTypes.node,
PropTypes.arrayOf(PropTypes.node),
]).isRequired,
id: PropTypes.string.isRequired,
inline: PropTypes.bool,
helpText: PropTypes.string,
};
export function Radio({ label, id, helpText, inline, ...props }) {
return (
<>
<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 && (
<small className="form-text text-muted mt-0 mb-3">
{helpText}
</small>
)}
</div>
</>
);
}
export default RadioSet;

View File

@ -1,11 +1,12 @@
/*
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* 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 from "react";
import PropTypes from "prop-types";
import { useUID } from "react-uid";
@ -20,7 +21,7 @@ Select.propTypes = {
helpText: PropTypes.string,
};
export function Select({ label, choices, helpText, ...props }) {
function Select({ label, choices, helpText, ...props }) {
const uid = useUID();
const options = Object.keys(choices).map((choice) => (
@ -30,14 +31,20 @@ export function Select({ label, choices, helpText, ...props }) {
));
return (
<div className="form-group">
<label htmlFor={uid}>{label}</label>
<select className="custom-select" id={uid} {...props}>
<div className="mb-3">
<label className="form-label" htmlFor={uid}>
{label}
</label>
<select className="form-select" id={uid} {...props}>
{options}
</select>
{helpText ? (
<small className="form-text text-muted">{helpText}</small>
) : null}
{helpText && (
<div className="form-text">
<small>{helpText}</small>
</div>
)}
</div>
);
}
export default Select;

View File

@ -1,16 +1,22 @@
.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;
color: #00a2e2;
color: var(--bs-primary);
}
.spinner-fs-background {
background-color: rgba(2, 2, 2, 0.5);
color: rgb(230, 230, 230);
position: fixed;
width: 100%;
height: 100%;
top: 0;
width: 100vw;
height: 100vh;
display: flex;
align-items: center;

View File

@ -6,6 +6,7 @@
*/
import React from "react";
import PropTypes from "prop-types";
import "./Spinner.css";
@ -16,7 +17,7 @@ Spinner.propTypes = {
PropTypes.arrayOf(PropTypes.node),
PropTypes.node,
]),
/** Render component with full-screen mode (using apropriate `.css` styles) */
/** Render component with full-screen mode (using appropriate `.css` styles) */
fullScreen: PropTypes.bool.isRequired,
className: PropTypes.string,
};

View File

@ -1,11 +1,12 @@
/*
* Copyright (c) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* Copyright (c) 2020-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 from "react";
import PropTypes from "prop-types";
import { useUID } from "react-uid";
@ -18,32 +19,35 @@ Switch.propTypes = {
]).isRequired,
helpText: PropTypes.string,
switchHeading: PropTypes.bool,
className: PropTypes.string,
};
export function Switch({ label, helpText, switchHeading, ...props }) {
function Switch({ label, helpText, switchHeading, className, ...props }) {
const uid = useUID();
return (
<div className={`form-group ${switchHeading ? "switch" : ""}`.trim()}>
<div
className={`custom-control custom-switch ${
!helpText ? "custom-control-inline" : ""
} ${switchHeading ? "switch-heading" : ""}`.trim()}
className={`form-check form-switch ${className || "mb-3"} ${
switchHeading ? "d-flex align-items-center" : ""
}`.trim()}
>
<input
type="checkbox"
className="custom-control-input"
className={`form-check-input ${switchHeading ? "me-2" : ""}`.trim()}
role="switch"
id={uid}
{...props}
/>
<label className="custom-control-label" htmlFor={uid}>
<label className="form-check-label" htmlFor={uid}>
{label}
</label>
{helpText && (
<small className="form-text text-muted mt-0 mb-3">
{helpText}
</small>
)}
<div className="form-text">
<small>{helpText}</small>
</div>
)}
</div>
);
}
export default Switch;

View File

@ -1,16 +1,19 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 from "react";
import PropTypes from "prop-types";
import { Input } from "./Input";
import Input from "./Input";
export const TextInput = ({ ...props }) => <Input type="text" {...props} />;
function TextInput({ ...props }) {
return <Input type="text" {...props} />;
}
TextInput.propTypes = {
/** Field label. */
@ -20,3 +23,5 @@ TextInput.propTypes = {
/** Help text message. */
helpText: PropTypes.string,
};
export default TextInput;

View File

@ -0,0 +1,42 @@
/*
* Copyright (C) 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 from "react";
import { faEllipsisVertical } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import PropTypes from "prop-types";
import Button from "./Button";
ThreeDotsMenu.propTypes = {
/** Menu items. */
children: PropTypes.arrayOf(PropTypes.node).isRequired,
};
function ThreeDotsMenu({ children }) {
return (
<div className="dropdown">
<Button
className="btn-sm btn-link text-body"
data-bs-toggle="dropdown"
aria-expanded="false"
>
<FontAwesomeIcon icon={faEllipsisVertical} />
</Button>
<ul className="dropdown-menu">
{children.map((child) => (
<li key={child.key || child.props.id || Math.random()}>
{child}
</li>
))}
</ul>
</div>
);
}
export default ThreeDotsMenu;

View File

@ -0,0 +1,40 @@
ThreeDotsMenu Bootstrap component is a dropdown menu that appears when the user
clicks on three dots. It is used to display a list of actions that can be
performed on a particular item.
```js
import { useState } from "react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faEdit, faTrash } from "@fortawesome/free-solid-svg-icons";
const threeDotsMenuItems = [
{
text: "Edit",
icon: faEdit,
onClick: () => {
alert("Edit clicked");
},
},
{
text: "Delete",
icon: faTrash,
onClick: () => {
alert("Delete clicked");
},
},
];
<ThreeDotsMenu>
{threeDotsMenuItems.map((item, index) => (
<button key={index} onClick={item.onClick} className="dropdown-item">
<FontAwesomeIcon
icon={item.icon}
className="me-1"
width="1rem"
size="sm"
/>
{item.text}
</button>
))}
</ThreeDotsMenu>;
```

View File

@ -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", () => {

View File

@ -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", () => {

View File

@ -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", () => {

View File

@ -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();

View File

@ -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", () => {

View File

@ -9,7 +9,7 @@ import React from "react";
import { render } from "customTestRender";
import { RadioSet } from "../RadioSet";
import RadioSet from "../RadioSet";
const TEST_CHOICES = [
{

View File

@ -14,7 +14,7 @@ import {
render,
} from "customTestRender";
import { Select } from "../Select";
import Select from "../Select";
const TEST_CHOICES = {
1: "one",

View File

@ -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", () => {

View File

@ -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", () => {

View File

@ -29,7 +29,7 @@ exports[`<Button /> Render button with spinner 1`] = `
>
<span
aria-hidden="true"
class="spinner-border spinner-border-sm mr-1"
class="spinner-border spinner-border-sm me-1"
role="status"
/>
<span>

View File

@ -2,55 +2,51 @@
exports[`<Checkbox/> Render checkbox 1`] = `
<div
class="form-group"
>
<div
class="custom-control custom-checkbox "
class="mb-3 form-check"
>
<input
checked=""
class="custom-control-input"
class="form-check-input"
id="1"
type="checkbox"
/>
<label
class="custom-control-label"
class="form-check-label"
for="1"
>
Test label
<small
class="form-text text-muted"
</label>
<div
class="form-text"
>
<small>
Some help text
</small>
</label>
</div>
</div>
`;
exports[`<Checkbox/> Render uncheked checkbox 1`] = `
<div
class="form-group"
>
<div
class="custom-control custom-checkbox "
class="mb-3 form-check"
>
<input
class="custom-control-input"
class="form-check-input"
id="1"
type="checkbox"
/>
<label
class="custom-control-label"
class="form-check-label"
for="1"
>
Test label
<small
class="form-text text-muted"
</label>
<div
class="form-text"
>
<small>
Some help text
</small>
</label>
</div>
</div>
`;

View File

@ -2,9 +2,10 @@
exports[`<NumberInput/> Render number input 1`] = `
<div
class="form-group"
class="mb-3"
>
<label
class="form-label"
for="1"
>
Test label
@ -18,16 +19,13 @@ exports[`<NumberInput/> Render number input 1`] = `
type="number"
value="1"
/>
<div
class="input-group-append"
>
<button
aria-label="Increase"
class="btn btn-outline-secondary"
type="button"
>
<i
class="fas fa-plus"
class="fa"
/>
</button>
<button
@ -36,15 +34,16 @@ exports[`<NumberInput/> Render number input 1`] = `
type="button"
>
<i
class="fas fa-minus"
class="fa"
/>
</button>
</div>
</div>
<small
class="form-text text-muted"
<div
class="form-text"
>
<small>
Some help text
</small>
</div>
</div>
`;

View File

@ -2,9 +2,10 @@
exports[`<PasswordInput/> Render password input 1`] = `
<div
class="form-group"
class="mb-3"
>
<label
class="form-label"
for="1"
>
Test label
@ -20,10 +21,12 @@ exports[`<PasswordInput/> Render password input 1`] = `
value="Some password"
/>
</div>
<small
class="form-text text-muted"
<div
class="form-text"
>
<small>
Some help text
</small>
</div>
</div>
`;

View File

@ -2,7 +2,7 @@
exports[`<RadioSet/> Render radio set 1`] = `
<div
class="form-group"
class="mb-3"
>
<label
class="d-block"
@ -11,61 +11,63 @@ exports[`<RadioSet/> Render radio set 1`] = `
Radios set label
</label>
<div
class="custom-control custom-radio"
class="mb-3"
>
<input
checked=""
class="custom-control-input"
class="form-check-input me-2"
id="test_name-0"
name="test_name"
type="radio"
value="value"
/>
<label
class="custom-control-label"
class="form-check-label"
for="test_name-0"
>
label
</label>
</div>
<div
class="custom-control custom-radio"
class="mb-3"
>
<input
class="custom-control-input"
class="form-check-input me-2"
id="test_name-1"
name="test_name"
type="radio"
value="another value"
/>
<label
class="custom-control-label"
class="form-check-label"
for="test_name-1"
>
another label
</label>
</div>
<div
class="custom-control custom-radio"
class="mb-3"
>
<input
class="custom-control-input"
class="form-check-input me-2"
id="test_name-2"
name="test_name"
type="radio"
value="another on value"
/>
<label
class="custom-control-label"
class="form-check-label"
for="test_name-2"
>
another one label
</label>
</div>
<small
class="form-text text-muted"
<div
class="form-text"
>
<small>
Some help text
</small>
</div>
</div>
`;

View File

@ -3,15 +3,16 @@
exports[`<Select/> Test with snapshot. 1`] = `
<div>
<div
class="form-group"
class="mb-3"
>
<label
class="form-label"
for="1"
>
Test label
</label>
<select
class="custom-select"
class="form-select"
id="1"
>
<option
@ -30,11 +31,13 @@ exports[`<Select/> Test with snapshot. 1`] = `
three
</option>
</select>
<small
class="form-text text-muted"
<div
class="form-text"
>
<small>
Help text
</small>
</div>
</div>
</div>
`;

View File

@ -2,26 +2,25 @@
exports[`<Switch/> Render switch 1`] = `
<div
class="form-group"
>
<div
class="custom-control custom-switch"
class="form-check form-switch mb-3"
>
<input
checked=""
class="custom-control-input"
class="form-check-input"
id="1"
role="switch"
type="checkbox"
/>
<label
class="custom-control-label"
class="form-check-label"
for="1"
>
Test label
</label>
<small
class="form-text text-muted mt-0 mb-3"
<div
class="form-text"
>
<small>
Some help text
</small>
</div>
@ -30,25 +29,24 @@ exports[`<Switch/> Render switch 1`] = `
exports[`<Switch/> Render uncheked switch 1`] = `
<div
class="form-group"
>
<div
class="custom-control custom-switch"
class="form-check form-switch mb-3"
>
<input
class="custom-control-input"
class="form-check-input"
id="1"
role="switch"
type="checkbox"
/>
<label
class="custom-control-label"
class="form-check-label"
for="1"
>
Test label
</label>
<small
class="form-text text-muted mt-0 mb-3"
<div
class="form-text"
>
<small>
Some help text
</small>
</div>

View File

@ -2,9 +2,10 @@
exports[`<TextInput/> Render text input 1`] = `
<div
class="form-group"
class="mb-3"
>
<label
class="form-label"
for="1"
>
Test label
@ -19,10 +20,12 @@ exports[`<TextInput/> Render text input 1`] = `
value="Some text"
/>
</div>
<small
class="form-text text-muted"
<div
class="form-text"
>
<small>
Some help text
</small>
</div>
</div>
`;

View File

@ -1,11 +1,12 @@
/*
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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.
*/
/** Bootstrap column size for form fields */
// 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";
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 };

View File

@ -1,22 +1,22 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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, useEffect } from "react";
import PropTypes from "prop-types";
import { useAPIPost } from "../api/hooks";
import { API_STATE } from "../api/utils";
import { ForisURLs } from "../utils/forisUrls";
import { Button } from "../bootstrap/Button";
import Button from "../bootstrap/Button";
import { Modal, ModalHeader, ModalBody, ModalFooter } from "../bootstrap/Modal";
import { useAlert } from "../context/alertContext/AlertContext";
import { ForisURLs } from "../utils/forisUrls";
export function RebootButton(props) {
function RebootButton(props) {
const [triggered, setTriggered] = useState(false);
const [modalShown, setModalShown] = useState(false);
const [triggerRebootStatus, triggerReboot] = useAPIPost(ForisURLs.reboot);
@ -28,11 +28,11 @@ export function RebootButton(props) {
}
});
function rebootHandler() {
const rebootHandler = () => {
setTriggered(true);
triggerReboot();
setModalShown(false);
}
};
return (
<>
@ -76,3 +76,5 @@ function RebootModal({ shown, setShown, onReboot }) {
</Modal>
);
}
export default RebootButton;

View File

@ -1,26 +1,27 @@
/*
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* 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, { useEffect, useState } from "react";
import PropTypes from "prop-types";
import { Button } from "../../bootstrap/Button";
import { useAlert } from "../../context/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,
};
export function ResetWiFiSettings({ ws, endpoint }) {
function ResetWiFiSettings({ ws, endpoint }) {
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
@ -44,11 +45,11 @@ export function ResetWiFiSettings({ ws, endpoint }) {
}
}, [postResetResponse, setAlert]);
function onReset() {
const onReset = () => {
dismissAlert();
setIsLoading(true);
postReset();
}
};
return (
<div className={formFieldsSize}>
@ -58,7 +59,7 @@ export 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-right">
<div className="text-end">
<Button
className="btn-primary"
forisFormSize
@ -72,3 +73,5 @@ export function ResetWiFiSettings({ ws, endpoint }) {
</div>
);
}
export default ResetWiFiSettings;

View File

@ -6,15 +6,17 @@
*/
import React from "react";
import PropTypes from "prop-types";
import { Switch } from "../../bootstrap/Switch";
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 WifiGuestForm from "./WiFiGuestForm";
import { HELP_TEXTS, HTMODES, HWMODES, ENCRYPTIONMODES } from "./constants";
import WifiGuestForm from "./WiFiGuestForm";
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";
WiFiForm.propTypes = {
formData: PropTypes.shape({ devices: PropTypes.arrayOf(PropTypes.object) })
@ -92,7 +94,7 @@ function DeviceForm({
return (
<>
<Switch
label={<h2>{_(`Wi-Fi ${deviceID + 1}`)}</h2>}
label={<h2 className="mb-0">{_(`Wi-Fi ${deviceID + 1}`)}</h2>}
checked={formData.enabled}
onChange={setFormValue((value) => ({
devices: {
@ -119,12 +121,10 @@ function DeviceForm({
}))}
{...props}
>
<div className="input-group-append">
<WiFiQRCode
SSID={formData.SSID}
password={formData.password}
/>
</div>
</TextInput>
<PasswordInput

View File

@ -1,18 +1,19 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 from "react";
import PropTypes from "prop-types";
import { TextInput } from "../../bootstrap/TextInput";
import { Switch } from "../../bootstrap/Switch";
import { PasswordInput } from "../../bootstrap/PasswordInput";
import WiFiQRCode from "./WiFiQRCode";
import { HELP_TEXTS } from "./constants";
import WiFiQRCode from "./WiFiQRCode";
import PasswordInput from "../../bootstrap/PasswordInput";
import Switch from "../../bootstrap/Switch";
import TextInput from "../../bootstrap/TextInput";
WifiGuestForm.propTypes = {
formData: PropTypes.shape({
@ -67,14 +68,11 @@ export default function WifiGuestForm({
}))}
{...props}
>
<div className="input-group-append">
<WiFiQRCode
SSID={formData.SSID}
password={formData.password}
/>
</div>
</TextInput>
<PasswordInput
withEye
label={_("Password")}

View File

@ -1,31 +1,30 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 } from "react";
import QRCode from "qrcode.react";
import PropTypes from "prop-types";
import { ForisURLs } from "../../utils/forisUrls";
import { Button } from "../../bootstrap/Button";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import PropTypes from "prop-types";
import QRCode from "qrcode.react";
import { createAndDownloadPdf, toQRCodeContent } from "./qrCodeHelpers";
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);
@ -39,11 +38,11 @@ export default function WiFiQRCode({ SSID, password }) {
setModal(true);
}}
>
<img
width="20"
src={QR_ICON_PATH}
alt="QR"
style={{ opacity: 0.67 }}
<FontAwesomeIcon
icon="fa-solid fa-qrcode"
title={_("Show QR code")}
aria-label={_("Show QR code")}
className="text-secondary"
/>
</button>
{modal ? (
@ -71,23 +70,35 @@ 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-outline-primary"
className="btn-secondary"
onClick={(e) => {
e.preventDefault();
setShown(false);
}}
>
{_("Close")}
</Button>
<Button
className="btn-primary"
onClick={(e) => {
e.preventDefault();
createAndDownloadPdf(SSID, password);
}}
>
<i className="fas fa-arrow-down mr-2" />
<FontAwesomeIcon
icon="fa-solid fa-file-download"
className="me-2"
/>
{_("Download PDF")}
</Button>
</ModalFooter>

View File

@ -1,16 +1,17 @@
/*
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 from "react";
import PropTypes from "prop-types";
import { ForisForm } from "../../form/components/ForisForm";
import ResetWiFiSettings from "./ResetWiFiSettings";
import WiFiForm from "./WiFiForm";
import { ResetWiFiSettings } from "./ResetWiFiSettings";
import ForisForm from "../../form/components/ForisForm";
WiFiSettings.propTypes = {
ws: PropTypes.object.isRequired,
@ -19,7 +20,7 @@ WiFiSettings.propTypes = {
hasGuestNetwork: PropTypes.bool,
};
export function WiFiSettings({ ws, endpoint, resetEndpoint, hasGuestNetwork }) {
function WiFiSettings({ ws, endpoint, resetEndpoint, hasGuestNetwork }) {
return (
<>
<ForisForm
@ -117,3 +118,5 @@ export function validator(formData) {
});
return JSON.stringify(formErrors).match(/\[[{},?]+\]/) ? null : formErrors;
}
export default WiFiSettings;

View File

@ -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();

View File

@ -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;

View File

@ -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;

View File

@ -6,6 +6,8 @@ exports[`<RebootButton/> Render modal. 1`] = `
id="modal-container"
>
<div
aria-labelledby="modal-title"
aria-modal="true"
class="modal fade show"
role="dialog"
>
@ -19,21 +21,16 @@ exports[`<RebootButton/> Render modal. 1`] = `
<div
class="modal-header"
>
<h5
class="modal-title"
<h1
class="modal-title fs-5"
>
Warning!
</h5>
</h1>
<button
class="close"
aria-label="Close"
class="btn-close"
type="button"
>
<span
aria-hidden="true"
>
×
</span>
</button>
/>
</div>
<div
class="modal-body"

View File

@ -1,15 +1,16 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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, useContext, useCallback } from "react";
import React, { useState, useContext, useCallback, useMemo } 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([
@ -30,6 +31,10 @@ function AlertContextProvider({ children }) {
);
const dismissAlert = useCallback(() => setAlert(null), [setAlert]);
const contextValue = useMemo(
() => [setAlertWrapper, dismissAlert],
[setAlertWrapper, dismissAlert]
);
return (
<>
@ -40,7 +45,7 @@ function AlertContextProvider({ children }) {
</Alert>
</Portal>
)}
<AlertContext.Provider value={[setAlertWrapper, dismissAlert]}>
<AlertContext.Provider value={contextValue}>
{children}
</AlertContext.Provider>
</>

View File

@ -48,7 +48,7 @@ describe("AlertContext", () => {
// Alert is present
expect(getByText(componentContainer, "Alert content")).toBeDefined();
fireEvent.click(componentContainer.querySelector(".close"));
fireEvent.click(componentContainer.querySelector(".btn-close"));
// Alert is gone
expect(queryByText(componentContainer, "Alert content")).toBeNull();
});

View File

@ -6,14 +6,14 @@ exports[`AlertContext should render alert 1`] = `
id="alert-container"
>
<div
class="alert alert-dismissible alert-danger"
class="alert alert-danger alert-dismissible"
role="alert"
>
<button
class="close"
aria-label="Close"
class="btn-close"
type="button"
>
×
</button>
/>
Alert content
</div>
</div>

View File

@ -1,17 +1,17 @@
/*
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* 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 } from "react";
import React, { useContext, useEffect, useMemo } from "react";
import PropTypes from "prop-types";
import { useAPIGet } from "../../api/hooks";
import { ForisURLs } from "../../utils/forisUrls";
import { Spinner } from "../../bootstrap/Spinner";
import { ForisURLs } from "../../utils/forisUrls";
CustomizationContextProvider.propTypes = {
children: PropTypes.oneOfType([
@ -30,20 +30,31 @@ function CustomizationContextProvider({ children }) {
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 />;
}
const deviceDetails = getCustomizationResponse.data || {};
const isCustomized = !!(
deviceDetails &&
deviceDetails.customization !== undefined &&
deviceDetails.customization === "shield"
);
return (
<CustomizationContext.Provider value={{ deviceDetails, isCustomized }}>
<CustomizationContext.Provider value={contextValue}>
{children}
</CustomizationContext.Provider>
);

View File

@ -3,13 +3,13 @@
exports[`<SubmitButton/> Render load 1`] = `
<div>
<button
class="btn btn-primary col-sm-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
class="btn btn-primary col-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
disabled=""
type="submit"
>
<span
aria-hidden="true"
class="spinner-border spinner-border-sm mr-1"
class="spinner-border spinner-border-sm me-1"
role="status"
/>
<span>
@ -22,7 +22,7 @@ exports[`<SubmitButton/> Render load 1`] = `
exports[`<SubmitButton/> Render ready 1`] = `
<div>
<button
class="btn btn-primary col-sm-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
class="btn btn-primary col-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
type="submit"
>
<span>
@ -35,13 +35,13 @@ exports[`<SubmitButton/> Render ready 1`] = `
exports[`<SubmitButton/> Render saving 1`] = `
<div>
<button
class="btn btn-primary col-sm-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
class="btn btn-primary col-12 col-md-3 col-lg-2 d-inline-flex justify-content-center align-items-center"
disabled=""
type="submit"
>
<span
aria-hidden="true"
class="spinner-border spinner-border-sm mr-1"
class="spinner-border spinner-border-sm me-1"
role="status"
/>
<span>

View File

@ -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.

View File

@ -1,24 +1,24 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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, { useEffect } from "react";
import PropTypes from "prop-types";
import { Prompt } from "react-router-dom";
import { ALERT_TYPES } from "../../bootstrap/Alert";
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 { formFieldsSize } from "../../bootstrap/constants";
import { Spinner } from "../../bootstrap/Spinner";
import { useAlert } from "../../context/alertContext/AlertContext";
import { useAPIPost } from "../../api/hooks";
import ErrorMessage from "../../utils/ErrorMessage";
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.
* */
export function ForisForm({
function ForisForm({
ws,
forisConfig,
prepData,
@ -131,16 +131,16 @@ export function ForisForm({
return <Spinner />;
}
function onSubmitHandler(event) {
const onSubmitHandler = (event) => {
event.preventDefault();
resetFormData();
dismissAlert();
const copiedFormData = JSON.parse(JSON.stringify(formState.data));
const preparedData = prepDataToSubmit(copiedFormData);
post({ data: preparedData });
}
};
function getSubmitButtonState() {
const getSubmitButtonState = () => {
if (postState.state === API_STATE.SENDING) {
return SUBMIT_BUTTON_STATES.SAVING;
}
@ -148,7 +148,7 @@ export function ForisForm({
return SUBMIT_BUTTON_STATES.LOAD;
}
return SUBMIT_BUTTON_STATES.READY;
}
};
const formIsDisabled =
disabled ||
@ -174,7 +174,7 @@ export function ForisForm({
)
: onSubmitHandler;
function getMessageOnLeavingPage() {
const getMessageOnLeavingPage = () => {
if (
JSON.stringify(formState.data) ===
JSON.stringify(formState.initialData)
@ -183,14 +183,14 @@ export 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-right">
<div className="text-end">
<SubmitButton
state={getSubmitButtonState()}
disabled={submitButtonIsDisabled}
@ -200,3 +200,5 @@ export function ForisForm({
</div>
);
}
export default ForisForm;

View File

@ -6,9 +6,10 @@
*/
import React from "react";
import PropTypes from "prop-types";
import { Button } from "../../bootstrap/Button";
import Button from "../../bootstrap/Button";
export const STATES = {
READY: 1,

View File

@ -1,15 +1,16 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 { 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,

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* 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.
@ -17,32 +17,34 @@ export {
export { API_STATE } from "./api/utils";
// Bootstrap
export { Alert, ALERT_TYPES } from "./bootstrap/Alert";
export { Button } from "./bootstrap/Button";
export { CheckBox } from "./bootstrap/CheckBox";
export { CopyInput } from "./bootstrap/CopyInput";
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 { 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 Radio } from "./bootstrap/Radio";
export { default as RadioSet } from "./bootstrap/RadioSet";
export { default as Select } from "./bootstrap/Select";
export { default as TextInput } from "./bootstrap/TextInput";
export { formFieldsSize, buttonFormFieldsSize } from "./bootstrap/constants";
export { Switch } from "./bootstrap/Switch";
export { default as Switch } from "./bootstrap/Switch";
export { default as ThreeDotsMenu } from "./bootstrap/ThreeDotsMenu";
export { Spinner, SpinnerElement } from "./bootstrap/Spinner";
export { Modal, ModalBody, ModalFooter, ModalHeader } from "./bootstrap/Modal";
// Common
export { RebootButton } from "./common/RebootButton";
export { WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
export { ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
export { default as RebootButton } from "./common/RebootButton";
export { default as WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
export { default as ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
// Form
export { ForisForm } from "./form/components/ForisForm";
export { default as ForisForm } from "./form/components/ForisForm";
export {
SubmitButton,
STATES as SUBMIT_BUTTON_STATES,
@ -50,11 +52,11 @@ export {
export { useForisModule, useForm } from "./form/hooks";
// WebSockets
export { useWSForisModule } from "./webSockets/hooks";
export { WebSockets } from "./webSockets/WebSockets";
export { default as useWSForisModule } from "./webSockets/hooks";
export { default as WebSockets } from "./webSockets/WebSockets";
// Utils
export { Portal } from "./utils/Portal";
export { default as Portal } from "./utils/Portal";
export {
undefinedIfEmpty,
withoutUndefinedKeys,
@ -68,11 +70,11 @@ export {
withError,
withErrorMessage,
} from "./utils/conditionalHOCs";
export { ErrorMessage } from "./utils/ErrorMessage";
export { default as ErrorMessage } from "./utils/ErrorMessage";
export { useClickOutside } from "./utils/hooks";
export { toLocaleDateString } from "./utils/datetime";
export { displayCard } from "./utils/displayCard";
export { isPluginInstalled } from "./utils/isPluginInstalled";
export { default as toLocaleDateString } from "./utils/datetime";
export { default as displayCard } from "./utils/displayCard";
export { default as isPluginInstalled } from "./utils/isPluginInstalled";
// Foris URL
export { ForisURLs, REFORIS_URL_PREFIX } from "./utils/forisUrls";

View File

@ -1,10 +1,10 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 from "react";
import mockAxios from "jest-mock-axios";
import moment from "moment-timezone";
import "./mockGlobals";
@ -26,3 +26,8 @@ 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" />,
}));

View File

@ -1,11 +1,12 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 from "react";
import PropTypes from "prop-types";
ErrorMessage.propTypes = {
@ -16,6 +17,8 @@ ErrorMessage.defaultProps = {
message: _("An error occurred while fetching data."),
};
export function ErrorMessage({ message }) {
function ErrorMessage({ message }) {
return <p className="text-center text-danger">{message}</p>;
}
export default ErrorMessage;

View File

@ -1,14 +1,22 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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 PropTypes from "prop-types";
import ReactDOM from "react-dom";
export function Portal({ containerId, children }) {
Portal.propTypes = {
containerId: PropTypes.string.isRequired,
children: PropTypes.node.isRequired,
};
function Portal({ containerId, children }) {
const container = document.getElementById(containerId);
if (container) return ReactDOM.createPortal(children, container);
return null;
}
export default Portal;

View File

@ -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", () => {

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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.
@ -7,16 +7,23 @@
import React from "react";
import { Spinner } from "../bootstrap/Spinner";
import ErrorMessage from "./ErrorMessage";
import { API_STATE } from "../api/utils";
import { ErrorMessage } from "./ErrorMessage";
import { Spinner } from "../bootstrap/Spinner";
function withEither(conditionalFn, Either) {
return (Component) => (props) => {
return (Component) => {
function WithEither(props) {
if (conditionalFn(props)) {
return <Either {...props} />;
}
return <Component {...props} />;
}
// Setting displayName for better debugging
WithEither.displayName = `WithEither(${Component.displayName || Component.name || "Component"})`;
return WithEither;
};
}

View File

@ -1,9 +1,8 @@
import moment from "moment";
export function toLocaleDateString(
date,
{ inputFormat, outputFormat = "LLL" } = {}
) {
function toLocaleDateString(date, { inputFormat, outputFormat = "LLL" } = {}) {
const parsedDate = inputFormat ? moment(date, inputFormat) : moment(date);
return parsedDate.locale(ForisTranslations.locale).format(outputFormat);
}
export default toLocaleDateString;

View File

@ -1,11 +1,11 @@
/*
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* Copyright (C) 2020-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.
*/
export function displayCard({ package_lists: packages }, cardName) {
function displayCard({ package_lists: packages }, cardName) {
const enabledPackagesNames = [];
packages
.filter((item) => item.enabled)
@ -21,3 +21,5 @@ export function displayCard({ package_lists: packages }, cardName) {
});
return enabledPackagesNames.includes(cardName);
}
export default displayCard;

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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.
@ -9,8 +9,10 @@ export const REFORIS_URL_PREFIX = "/reforis";
export const REFORIS_API_URL_PREFIX = `${REFORIS_URL_PREFIX}/api`;
export const ForisURLs = {
// turris-auth
login: `/login?${REFORIS_URL_PREFIX}/`,
logout: `/logout`,
extendSession: `/extend-session`,
static: `${REFORIS_URL_PREFIX}/static/reforis`,
wifi: `${REFORIS_URL_PREFIX}/network-settings/wifi`,
@ -25,6 +27,13 @@ export const ForisURLs = {
storage: `${REFORIS_URL_PREFIX}/storage`,
sentinelAgreement: `${REFORIS_URL_PREFIX}/sentinel/agreement`,
// URLs without prefix for Overview page
openvpnClientSettings: "/openvpn/client-settings",
packageManagementPackages: "/package-management/packages",
packageManagementUpdateSettings: "/package-management/update-settings",
sentinelLicenseAgreement: "/sentinel/agreement",
librespeedSpeedTest: "/librespeed/speed-test",
// Notifications links are used with <Link/> inside Router, thus url subdir is not required.
overview: "/overview",
notifications: "/overview#notifications",

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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.
@ -40,3 +40,40 @@ export function useClickOutside(element, callback) {
};
});
}
/* Trap focus inside element. */
export function useFocusTrap(elementRef, condition = true) {
useEffect(() => {
if (!condition) {
return;
}
const currentElement = elementRef.current;
const focusableElements = currentElement.querySelectorAll(
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
);
const firstElement = focusableElements[0];
const lastElement = focusableElements[focusableElements.length - 1];
const handleTab = (event) => {
if (event.key === "Tab") {
if (event.shiftKey) {
if (document.activeElement === firstElement) {
lastElement.focus();
event.preventDefault();
}
} else if (document.activeElement === lastElement) {
firstElement.focus();
event.preventDefault();
}
}
};
currentElement.addEventListener("keydown", handleTab);
firstElement.focus();
return () => {
currentElement.removeEventListener("keydown", handleTab);
};
}, [elementRef, condition]);
}

View File

@ -1,9 +1,11 @@
/*
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* Copyright (C) 2020-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.
*/
export const isPluginInstalled = (pluginName) =>
const isPluginInstalled = (pluginName) =>
ForisPlugins.some((plugin) => plugin.name === pluginName);
export default isPluginInstalled;

View File

@ -23,12 +23,15 @@ 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) => {

View File

@ -10,14 +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.host}/${process.env.WSPATH || "foris-ws"}`
: `${PROTOCOL}://${window.location.hostname}:9081`;
const WAITING_FOR_CONNECTION_TIMEOUT = 500;
export class WebSockets {
class WebSockets {
constructor() {
this.ws = new WebSocket(URL);
this.ws.onerror = (e) => {
@ -122,3 +120,5 @@ export class WebSockets {
this.ws.close();
}
}
export default WebSockets;

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* 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.
@ -7,7 +7,8 @@
import { useEffect, useState } from "react";
export function useWSForisModule(
/* eslint-disable default-param-last */
function useWSForisModule(
ws,
module,
action = "update_settings",
@ -41,3 +42,5 @@ export function useWSForisModule(
return [data];
}
export default useWSForisModule;

View File

@ -65,7 +65,7 @@ module.exports = {
components: "src/bootstrap/*.js",
exampleMode: "expand",
usageMode: "expand",
ignore: ["src/bootstrap/constants.js"],
ignore: ["src/bootstrap/constants.js", "src/bootstrap/Radio.js"],
sectionDepth: 0,
},
],
@ -79,10 +79,7 @@ module.exports = {
__dirname,
"node_modules/bootstrap/dist/css/bootstrap.min.css"
),
path.join(
__dirname,
"node_modules/@fortawesome/fontawesome-free/css/all.min.css"
),
path.join(__dirname, "node_modules/bootstrap/dist/js/bootstrap.min.js"),
],
styleguideComponents: {
LogoRenderer: path.join(__dirname, "docs/components/Logo"),
@ -105,8 +102,5 @@ module.exports = {
},
],
},
devServer: {
publicPath: "/",
},
},
};

View File

@ -1,24 +1,23 @@
# Czech translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2023-11-23 16:03+0000\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-09-25 10:15+0000\n"
"Last-Translator: Lukas Jelinek <lukas.jelinek@nic.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-js/cs/"
">\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.2.1-rc\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -36,11 +35,16 @@ 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/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr "Zavřít"
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Zkopírováno!"
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Kopírovat"
@ -68,35 +72,35 @@ msgstr "Zrušit"
msgid "Confirm reboot"
msgstr "Potvrdit restart"
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
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:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr "Nastavení Wi-Fi jsou uvedena do výchozího stavu."
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr "Reset nastavení Wi-Fi"
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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."
"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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr "Wi-Fi ${deviceID + 1}"
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr "Heslo"
@ -125,8 +129,8 @@ 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."
"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
msgid "auto"
@ -136,40 +140,45 @@ msgstr "automaticky"
msgid "Custom"
msgstr "Uživatelsky určené"
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr "Zapnout Wi-Fi pro hosty"
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr "Ukázat QR kód"
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr "Wi-Fi QR kód"
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr "Stáhnout PDF"
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr "SSID nemůže být delší než 32 znaků"
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr "SSID je třeba vyplnit"
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: src/common/WiFiSettings/WiFiSettings.js:86
#: src/common/WiFiSettings/WiFiSettings.js:103
msgid "SSID can't be longer than 32 bytes"
msgstr "SSID nemůže být delší než 32 bajtů"
#: src/common/WiFiSettings/WiFiSettings.js:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: src/common/WiFiSettings/WiFiSettings.js:89
#: src/common/WiFiSettings/WiFiSettings.js:106
msgid "Password must contain at least 8 symbols"
msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
#: src/common/WiFiSettings/WiFiSettings.js:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr "Heslo nesmí obsahovat více než 63 znaků"
@ -254,10 +263,10 @@ msgid ""
"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."
"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."
#: src/common/WiFiSettings/constants.js:43
msgid ""
@ -266,9 +275,10 @@ msgid ""
"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."
"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."
#: src/common/WiFiSettings/constants.js:46
msgid ""
@ -279,9 +289,9 @@ msgid ""
"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“."
" 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“."
#: src/common/WiFiSettings/constants.js:49
msgid ""
@ -290,8 +300,8 @@ 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 "
"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."
@ -305,19 +315,19 @@ msgstr ""
"Změny, které byly provedeny, nebyly uloženy. Jste si jistý, že chcete "
"opustit stránku?"
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr "Aktualizuji"
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr "Načítám nastavení"
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr "Uložit"
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr "Došlo k chybě při získávání dat."
@ -378,3 +388,4 @@ msgstr "Neobsahuje seznam e-mailů oddělených čárkou."
#~ "ale, že\n"
#~ "se tím odstraní aktuální konfigurace a vrátí se výchozí hodnoty.\n"
#~ " "

View File

@ -1,13 +1,13 @@
# Danish translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: da\n"
@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -34,11 +34,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -66,32 +71,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -129,40 +134,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -277,19 +287,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

View File

@ -1,24 +1,23 @@
# German translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
"Last-Translator: Erik Pfannenstein <debianignatz@gmx.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/turris/foris-js/"
"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"
"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.4-dev\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -36,11 +35,16 @@ msgstr "Keine Antwort erhalten."
msgid "An unknown API error occurred."
msgstr "Ein unbekannter API-Fehler ist aufgetreten."
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Kopiert!"
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Kopieren"
@ -68,22 +72,22 @@ msgstr "Abbrechen"
msgid "Confirm reboot"
msgstr "Neustart bestätigen"
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
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:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr "WLAN-Einstellungen wurden auf Standard zurückgesetzt."
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr "WLAN-Einstellungen zurücksetzen"
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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 "
@ -93,12 +97,12 @@ msgstr ""
" WLAN-Einstellungen zurückzusetzen. Beachten Sie, dass dabei die aktuelle"
" WLAN-Konfiguration mit den Werkseinstellungen überschrieben wird."
#: src/common/WiFiSettings/WiFiForm.js:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr "WLAN ${deviceID + 1}"
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr "Passwort"
@ -127,8 +131,8 @@ 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."
"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
msgid "auto"
@ -138,40 +142,46 @@ msgstr "automatisch"
msgid "Custom"
msgstr "Benutzerdefiniert"
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr "Gast-WLAN aktivieren"
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: 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
msgid "Wi-Fi QR Code"
msgstr "WLAN QR-Code"
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr "PDF herunterladen"
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr "Die SSID darf nicht länger als 32 Zeichen sein"
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: 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:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr "Das Passwort darf höchstens 63 Zeichen enthalten"
@ -257,10 +267,10 @@ msgid ""
"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."
" 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."
#: src/common/WiFiSettings/constants.js:43
msgid ""
@ -269,10 +279,10 @@ msgid ""
"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."
"Ä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."
#: src/common/WiFiSettings/constants.js:46
msgid ""
@ -282,11 +292,11 @@ 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."
"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."
#: src/common/WiFiSettings/constants.js:49
msgid ""
@ -297,9 +307,9 @@ msgid ""
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."
"ä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"
@ -311,19 +321,19 @@ msgstr ""
"Änderungen, die Sie vorgenommen haben, werden möglicherweise nicht "
"gespeichert. Möchten Sie wirklich gehen?"
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr "Aktualisiere"
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr "Einstellungen laden"
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr "Speichern"
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr "Beim Abruf der Daten ist ein Fehler aufgetreten."
@ -377,3 +387,4 @@ msgstr "Enthält keine Liste von E-Mails, die durch Kommas getrennt sind."
#~ "current Wi-Fi configuration and restore the default values.\n"
#~ " "
#~ msgstr ""

View File

@ -1,13 +1,13 @@
# Greek translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2021-02-09 16:50+0000\n"
"Last-Translator: Michalis <michalisntovas@yahoo.gr>\n"
"Language: el\n"
@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -35,11 +35,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -67,32 +72,32 @@ msgstr "Άκυρο"
msgid "Confirm reboot"
msgstr "Επιβεβαίωση επανεκκίνησης"
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -131,40 +136,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -279,19 +289,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

View File

@ -1,13 +1,13 @@
# English translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-10-17 09:28+0000\n"
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
"Language: en\n"
@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -35,11 +35,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -67,32 +72,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -130,40 +135,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -278,19 +288,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

View File

@ -1,15 +1,15 @@
# Spanish translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2022-09-11 17:15+0000\n"
"Last-Translator: Dan Cybersec <dan.cybersec@protonmail.com>\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-08-24 13:09+0000\n"
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
"Language: es\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/turris/foris-"
"js/es/>\n"
@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -37,11 +37,16 @@ msgstr ""
"Un error desconocido ha ocurrido. Compruebe la consola para mas "
"informaciòn."
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr "Cerrar"
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "¡Copiado!"
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Copiar"
@ -69,20 +74,20 @@ msgstr "Cancelar"
msgid "Confirm reboot"
msgstr "Confirmar reinicio"
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr "Ocurrió un error durante el reseteo de los ajustes Wi-Fi."
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr "Los ajustes Wi-Fi se han definido por defecto."
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr "Resetear los ajustes Wi-Fi"
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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 "
@ -92,12 +97,12 @@ msgstr ""
"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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr "Wi-Fi ${deviceID + 1}"
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr "Contraseña"
@ -119,13 +124,15 @@ msgstr "Cifrado"
#: src/common/WiFiSettings/WiFiForm.js:226
msgid "Disable Management Frame Protection"
msgstr ""
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
msgid "auto"
@ -135,40 +142,45 @@ msgstr "automático"
msgid "Custom"
msgstr "Personalizado"
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr "Activar el modo Wi-Fi de invitados"
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: 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
msgid "Wi-Fi QR Code"
msgstr "Código QR Wi-Fi"
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr "Descargar PDF"
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr "El SSID no puede ser más largo que 32 símbolos"
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: 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"
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr "La contraseña no debe contener más de 63 símbolos"
@ -306,19 +318,19 @@ msgstr ""
"Los cambios que has realizado podrían no haberse guardado. ¿Estás seguro "
"de que quieres salir?"
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr "Actualizando"
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr "Cargando los ajustes"
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr "Guardar"
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr "Se ha producido un error mientras se recuperaban los datos."

View File

@ -1,13 +1,13 @@
# Finnish translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: fi\n"
@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -34,11 +34,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -66,32 +71,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -129,40 +134,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -277,19 +287,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

View File

@ -1,13 +1,13 @@
# Faroese translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: fo\n"
@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -34,11 +34,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -66,32 +71,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -129,40 +134,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -277,19 +287,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

View File

@ -1,21 +1,21 @@
# Translations template for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Foris JS 5.4.1\n"
"Project-Id-Version: Foris JS 6.2.0\n"
"Report-Msgid-Bugs-To: tech.support@turris.cz\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\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.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -33,11 +33,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -65,32 +70,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -128,40 +133,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -276,19 +286,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

View File

@ -1,15 +1,15 @@
# French translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2022-01-14 05:53+0000\n"
"Last-Translator: Gabriel GRONDIN <gglinnk@protonmail.com>\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-07-27 01:09+0000\n"
"Last-Translator: Moha684 <nahil82466@gmail.com>\n"
"Language: fr\n"
"Language-Team: French <https://hosted.weblate.org/projects/turris/foris-"
"js/fr/>\n"
@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -35,13 +35,18 @@ msgstr "Aucun réponse reçue."
msgid "An unknown API error occurred."
msgstr "Une erreur dAPI inconnue sest produite."
#: src/bootstrap/CopyInput.js:55
msgid "Copied!"
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Copié!"
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
msgstr "Copier"
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
@ -67,34 +72,34 @@ msgstr "Annuler"
msgid "Confirm reboot"
msgstr "Confirmer le redémarrage"
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
"Une erreur s'est produite lors de la réinitialisation des paramètres Wi-"
"Fi."
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr "Les paramètres Wi-Fi sont définis par défaut."
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr "Réinitialiser les paramètres Wi-Fi"
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr "Wi-Fi ${deviceID + 1}"
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr "Mot de passe"
@ -117,13 +122,15 @@ msgstr "Chiffrement"
#: src/common/WiFiSettings/WiFiForm.js:226
msgid "Disable Management Frame Protection"
msgstr ""
msgstr "Désactiver le mode Protection du cadre de gestion"
#: src/common/WiFiSettings/WiFiForm.js:227
msgid ""
"In case you have trouble connecting to WiFi Access Point, try disabling "
"Management Frame Protection."
msgstr ""
"Si vous rencontrez des soucis à vous connecter à un point d'accès WiFi, "
"merci d'essayer de désactiver le mode Protection du cadre de gestion."
#: src/common/WiFiSettings/WiFiForm.js:262
msgid "auto"
@ -133,40 +140,46 @@ msgstr "automatique"
msgid "Custom"
msgstr "Personnalisé"
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr "Activer le mode Wi-Fi invité"
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
#, fuzzy
msgid "Show QR code"
msgstr "Code QR Wi-Fi"
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr "Code QR Wi-Fi"
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr "Télécharger le PDF"
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr "Le SSID ne peut pas être plus long que 32 symboles"
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr "Le SSID ne peut pas être vide"
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: src/common/WiFiSettings/WiFiSettings.js:86
#: src/common/WiFiSettings/WiFiSettings.js:103
msgid "SSID can't be longer than 32 bytes"
msgstr "Le SSID ne peut pas dépasser 32 octets"
#: src/common/WiFiSettings/WiFiSettings.js:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: src/common/WiFiSettings/WiFiSettings.js:89
#: src/common/WiFiSettings/WiFiSettings.js:106
msgid "Password must contain at least 8 symbols"
msgstr "Le mot de passe doit contenir au moins 8 symboles"
#: src/common/WiFiSettings/WiFiSettings.js:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
#, fuzzy
msgid "Password must not contain more than 63 symbols"
msgstr "Le mot de passe doit contenir au moins 8 symboles"
@ -330,19 +343,19 @@ msgstr ""
"Il se peut que vos modifications ne soient pas enregistrées. Êtes-vous "
"sûr de vouloir quitter?"
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr "Mise à jour en cours"
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr "Charger les paramètres"
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr "Enregistrer"
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr "Une erreur sest produite lors du chargement des données."

View File

@ -1,13 +1,13 @@
# Croatian translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2022-09-29 14:17+0000\n"
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language: hr\n"
@ -18,7 +18,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -36,11 +36,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -68,32 +73,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr "Lozinka"
@ -131,40 +136,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -279,19 +289,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr "Spremi"
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

View File

@ -1,13 +1,13 @@
# Hungarian translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2021-01-07 01:26+0000\n"
"Last-Translator: Zoli <boritek@gmail.com>\n"
"Language: hu\n"
@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -35,11 +35,16 @@ msgstr "Nem érkezett válasz."
msgid "An unknown API error occurred."
msgstr "Ismeretlen API-hiba történt."
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -67,32 +72,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -130,40 +135,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -280,19 +290,19 @@ msgstr ""
"Lehet, hogy az Ön által végrehajtott módosításokat nem menti a rendszer. "
"Biztosan el akar menni?"
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr "Frissítés"
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr "Beállítások betöltése"
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr "Mentés"
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr "Hiba történt az adatok beolvasása közben."

View File

@ -1,24 +1,23 @@
# Italian translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2022-12-31 23:48+0000\n"
"Last-Translator: Anselmo <anselmo@casinadicornia.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/turris/foris-js/"
"it/>\n"
"Language: it\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/turris/foris-"
"js/it/>\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 4.15.1-dev\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -36,11 +35,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -68,32 +72,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr "Password"
@ -131,40 +135,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -279,19 +288,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""
@ -416,3 +425,4 @@ msgstr ""
#~ " default option with 20 MHz wide "
#~ "channel."
#~ msgstr ""

View File

@ -1,13 +1,13 @@
# Japanese translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-10-16 10:08+0000\n"
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
"Language: ja\n"
@ -17,7 +17,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -35,11 +35,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -67,32 +72,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -131,40 +136,45 @@ msgstr "自動"
msgid "Custom"
msgstr "自動"
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -279,19 +289,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr "アップデート中…"
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

View File

@ -1,13 +1,13 @@
# Korean translations for Foris JS.
# Copyright (C) 2022 CZ.NIC, z.s.p.o. (https://www.nic.cz/)
# Copyright (C) 2024 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>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: ko\n"
@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
@ -34,11 +34,16 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:55
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
@ -66,32 +71,32 @@ msgstr ""
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
#: src/common/WiFiSettings/ResetWiFiSettings.js:56
#: src/common/WiFiSettings/ResetWiFiSettings.js:70
msgid "Reset Wi-Fi Settings"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:57
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
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:95
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
#: src/common/WiFiSettings/WiFiGuestForm.js:78
msgid "Password"
msgstr ""
@ -129,40 +134,45 @@ msgstr ""
msgid "Custom"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:42
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:71
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
msgid "Show QR code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
msgstr ""
#: src/common/WiFiSettings/WiFiQRCode.js:91
#: src/common/WiFiSettings/WiFiQRCode.js:102
msgid "Download PDF"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:99
msgid "SSID can't be longer than 32 symbols"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
#: src/common/WiFiSettings/WiFiSettings.js:84
#: src/common/WiFiSettings/WiFiSettings.js:101
msgid "SSID can't be empty"
msgstr ""
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
#: 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:88
#: src/common/WiFiSettings/WiFiSettings.js:105
#: 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:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr ""
@ -277,19 +287,19 @@ msgstr ""
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
#: src/form/components/SubmitButton.js:31
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr ""
#: src/form/components/SubmitButton.js:34
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr ""
#: src/form/components/SubmitButton.js:37
#: src/form/components/SubmitButton.js:38
msgid "Save"
msgstr ""
#: src/utils/ErrorMessage.js:16
#: src/utils/ErrorMessage.js:17
msgid "An error occurred while fetching data."
msgstr ""

Some files were not shown because too many files have changed in this diff Show More