diff --git a/.github/workflows/cd_pipeline.yaml b/.github/workflows/cd_pipeline.yaml
index 009c825..304067f 100644
--- a/.github/workflows/cd_pipeline.yaml
+++ b/.github/workflows/cd_pipeline.yaml
@@ -23,9 +23,9 @@ jobs:
$manifest.version = $package.version;
$manifest | ConvertTo-Json -Depth 10 | Out-File "public/manifest.json"
- $manifest = Get-Content "public/manifest.firefox.json" | ConvertFrom-Json;
+ $manifest = Get-Content "public/manifest.v2.json" | ConvertFrom-Json;
$manifest.version = $package.version;
- $manifest | ConvertTo-Json -Depth 10 | Out-File "public/manifest.firefox.json"
+ $manifest | ConvertTo-Json -Depth 10 | Out-File "public/manifest.v2.json"
- name: Setup Node.js
uses: actions/setup-node@v3
@@ -54,7 +54,7 @@ jobs:
- name: Configure manifest
uses: Amadevus/pwsh-script@v2
with:
- script: Remove-Item "manifest.firefox.json"
+ script: Remove-Item "manifest.v2.json"
- name: Pack extension
uses: TheDoctor0/zip-release@0.6.2
@@ -90,7 +90,7 @@ jobs:
with:
script: |
Remove-Item "manifest.json"
- Rename-Item "manifest.firefox.json" "manifest.json"
+ Rename-Item "manifest.v2.json" "manifest.json"
- name: Pack extension
uses: TheDoctor0/zip-release@0.6.2
diff --git a/.github/workflows/pr_pipeline.yaml b/.github/workflows/pr_pipeline.yaml
index 89b335a..3acd017 100644
--- a/.github/workflows/pr_pipeline.yaml
+++ b/.github/workflows/pr_pipeline.yaml
@@ -28,9 +28,9 @@ jobs:
[PSCustomObject] $manifest = Get-Content "public/manifest.json" | ConvertFrom-Json;
$manifest.version = $package.version;
$manifest | ConvertTo-Json -Depth 10 | Out-File "public/manifest.json"
- $manifest = Get-Content "public/manifest.firefox.json" | ConvertFrom-Json;
+ $manifest = Get-Content "public/manifest.v2.json" | ConvertFrom-Json;
$manifest.version = $package.version;
- $manifest | ConvertTo-Json -Depth 10 | Out-File "public/manifest.firefox.json"
+ $manifest | ConvertTo-Json -Depth 10 | Out-File "public/manifest.v2.json"
- name: Setup Node.js
uses: actions/setup-node@v3
@@ -61,8 +61,8 @@ jobs:
with:
script: |
Remove-Item "manifest.json"
- Rename-Item "manifest.firefox.json" "manifest.json"
-
+ Rename-Item "manifest.v2.json" "manifest.json"
+
- name: "web-ext lint"
uses: kewisch/action-web-ext@e0ea88d527a8a90bc10d600f80ac667d219e6bf1
with:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1e0048c..1b94ae9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -112,7 +112,7 @@ This section represents how contributors should interact with codebase implement
7. Done
#### Release
-Next stage is release. Release performs on every push to main (which makes functional changes to the source code). Release performs manually by @XFox111 into: Chrome webstore, Edge webstore and GitHub releases
+Next stage is release. Release performs on every push to main (which makes functional changes to the source code). Release performs manually by @XFox111 into: Chrome, Firefox, Edge webstores as well as GitHub releases
### Coding guidelines
#### Indentation
@@ -121,7 +121,8 @@ We use tabs, not spaces.
#### Names
The project naming rules inherit [.NET Naming Guidelines](https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/naming-guidelines). Nevertheless there'is some distinction with the guidelines as well as additions to the one:
- Use `camelCase` for variables instead of `CamelCase` stated in [Capitalization Conventions](https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/capitalization-conventions#capitalization-rules-for-identifiers)
-- Use `snake_case` for file names
+- Use `camelCase` for files in `public` directory
+- Use `PascalCase` for files in `src` directory
#### Comments
Leave as more comments as you can. Remember: the more detailed documentation your code has the less programmers will curse you in the future
@@ -131,43 +132,48 @@ Use "double quotes" wherever it's possible
#### Style
- Prefer to use lambda functions
-- Put curly braces on new lines
+- Always put curly braces on new lines
- Wrong:
- ```
+ ```js
if (condition) {
...
}
```
- Correct:
- ```
+ ```js
if (condition)
{
...
}
```
-- Put spaces between operators and before braces in methods declarations, conditionals and loops
+ > **Note:** For JSON files put opening brace on the same line as the key
+- Put spaces between operators, conditionals and loops
- Wrong:
- - `y=k*x+b`
- - `function FunctionName()`
+ ```js
+ y=k*x+b;
+ if(condition) { ... }
+ ```
- Correct:
- - `y = k * x + b`
- - `function FunctionName ()`
-- Use ternary conditionals wherever it's possible
+ ```js
+ y = k * x + b;
+ if (condition) { ... }
+ ```
+- Use ternary conditionals wherever it's possible, unless it's too long
- Wrong:
- ```
+ ```js
var s;
if (condition)
s = "Life";
else
- s = "Death"
+ s = "Death";
```
- Correct:
- ```
+ ```js
var s = condition ? "Life" : "Death";
```
- Do not surround loop and conditional bodies with curly braces if they can be avoided
- Wrong:
- ```
+ ```js
if (condition)
{
console.log("Hello, World!");
@@ -178,12 +184,84 @@ Use "double quotes" wherever it's possible
}
```
- Correct
- ```
+ ```js
if (condition)
console.log("Hello, World!");
else
return;
```
+- Prefer export modules as default
+ - Wrong:
+ ```js
+ export class MyClass { ... }
+ ```
+ - Correct:
+ ```js
+ export default class MyClass { ... }
+ ```
+- Prefer export modules as classes unless it is excessive
+ - Wrong:
+ ```ts
+ export function MyFunction1() { ... }
+ export function MyFunction2() { ... }
+ export default class MyClass2()
+ {
+ public static GetDate(timestamp: number): Date
+ {
+ return new Date(timestamp);
+ }
+ }
+ ```
+ - Correct:
+ ```js
+ export default class MyClass1
+ {
+ public static MyFunction1() { ... }
+ public static MyFunction2() { ... }
+ }
+ export default GetDate(timestamp: number): Date
+ {
+ return new Date(timestamp);
+ }
+ ```
+- When JSX attributes take too much space, put each attribute on a new line and put additional line before component's content
+ - Wrong:
+ ```tsx
+ My content here
+ My content here
+
+ My content here
+
+
+ My content here
+
+ ```
+ - Correct:
+ ```tsx
+
+
+ My content here
+
+ ```
+- If JSX component doesn't have content, put space before closing tag
+ - Wrong:
+ ```tsx
+
+ ```
+ - Correct:
+ ```tsx
+
+ ```
### Finding an issue to work on
Check out the [full issues list](https://github.com/XFox111/PasswordGeneratorExtension/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue) for a list of all potential areas for contributions. **Note** that just because an issue exists in the repository does not mean we will accept a contribution. There are several reasons we may not accept a pull request like:
diff --git a/craco.config.ts b/craco.config.ts
index 3106e32..84b7a74 100644
--- a/craco.config.ts
+++ b/craco.config.ts
@@ -1,35 +1,66 @@
+import { CracoConfig, CracoContext } from "@craco/craco";
+import HtmlWebapckPlugin, { MinifyOptions } from "html-webpack-plugin";
+import { Configuration } from "webpack";
+
// Craco config file
// Craco is used to separate content and background scripts from the main JS bundle
-
-export default
+const cracoConfig: CracoConfig =
{
webpack:
{
- configure: (webpackConfig : any, { env, paths } : IEnvironment) =>
+ configure: (webpackConfig: Configuration, { env, paths }: CracoContext): Configuration =>
{
- return {
+ const isProduction: boolean = env === "production";
+
+ const config: Configuration =
+ {
...webpackConfig,
entry:
{
- main: [ env === "development" && require.resolve("react-dev-utils/webpackHotDevClient"), paths.appIndexJs ].filter(Boolean),
+ main: paths.appIndexJs,
background: "./src/Services/BackgroundService.ts",
- contentScript: "./src/Services/ContentService.ts"
+ contentScript: "./src/Services/ContentService.ts",
},
output:
{
...webpackConfig.output,
- filename: "static/js/[name].js",
+ filename: "static/js/[name].js"
+ },
+ optimization:
+ {
+ ...webpackConfig.optimization,
+ splitChunks: { cacheGroups: { default: false } },
+ runtimeChunk: false
}
- }
+ };
+
+ const minifyOptions: MinifyOptions =
+ {
+ removeComments: true,
+ collapseWhitespace: true,
+ removeRedundantAttributes: true,
+ useShortDoctype: true,
+ removeEmptyAttributes: true,
+ removeStyleLinkTypeAttributes: true,
+ keepClosingSlash: true,
+ minifyJS: true,
+ minifyCSS: true,
+ minifyURLs: true
+ };
+
+ config.plugins = config.plugins?.filter((plugin: any) => plugin.constructor.name !== "HtmlWebpackPlugin") ?? [];
+
+ config.plugins.push(new HtmlWebapckPlugin({
+ inject: true,
+ chunks: ["main"],
+ template: paths.appHtml,
+ filename: "index.html",
+ minify: isProduction && minifyOptions
+ }));
+
+ return config;
}
}
-}
+};
-interface IEnvironment
-{
- env: string;
- paths:
- {
- [key: string]: string | string[]
- };
-}
+export default cracoConfig;
diff --git a/package.json b/package.json
index c09e5d7..68e3017 100644
--- a/package.json
+++ b/package.json
@@ -1,54 +1,48 @@
{
"name": "password-generator",
- "version": "2.0.1",
+ "version": "2.0.2",
"private": true,
- "dependencies":
- {
+ "dependencies": {
"@craco/craco": "^6.4.5",
- "@fluentui/react-components": "^9.3.2",
- "@fluentui/react-icons": "^2.0.183",
+ "@fluentui/react-components": "^9.5.1",
+ "@fluentui/react-icons": "^2.0.185",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sass": "^1.55.0",
- "typescript": "^4.8.3"
+ "typescript": "^4.8.4",
+ "webextension-polyfill": "^0.10.0"
},
- "devDependencies":
- {
+ "devDependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^14.4.3",
- "@types/chrome": "^0.0.197",
- "@types/jest": "^29.1.1",
- "@types/node": "^18.7.18",
+ "@types/craco__craco": "^6.4.0",
+ "@types/jest": "^29.1.2",
+ "@types/node": "^18.11.0",
"@types/react": "^18.0.21",
"@types/react-dom": "^18.0.0",
+ "@types/webextension-polyfill": "^0.9.1",
"react-scripts": "5.0.1"
},
- "scripts":
- {
- "start": "react-scripts start",
- "build": "INLINE_RUNTIME_CHUNK=false craco build",
+ "scripts": {
+ "start": "craco start",
+ "build": "craco build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
- "eslintConfig":
- {
- "extends":
- [
+ "eslintConfig": {
+ "extends": [
"react-app",
"react-app/jest"
]
},
- "browserslist":
- {
- "production":
- [
+ "browserslist": {
+ "production": [
">0.2%",
"not dead",
"not op_mini all"
],
- "development":
- [
+ "development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
diff --git a/public/_locales/en/messages.json b/public/_locales/en/messages.json
index 6ca73bc..a67fc33 100644
--- a/public/_locales/en/messages.json
+++ b/public/_locales/en/messages.json
@@ -1,216 +1,173 @@
{
- "name":
- {
+ "name": {
"message": "Password Generator",
"description": "manifest.json"
},
- "description":
- {
+ "description": {
"message": "Password generator extension allows you to easily generate long and secure password in one click",
"description": "manifest.json"
},
- "author":
- {
+ "author": {
"message": "Eugene Fox",
"description": "manifest.json"
},
- "Password_generator":
- {
+ "Password_generator": {
"message": "Password generator",
"description": "App.tsx"
},
- "Copy":
- {
+ "Copy": {
"message": "Copy",
"description": "PasswordView.tsx"
},
- "Generate_new":
- {
+ "Generate_new": {
"message": "Generate new",
"description": "PasswordView.tsx"
},
- "Exclude_special_symbols_one_time":
- {
+ "Exclude_special_symbols_one_time": {
"message": "Generate password without special symbols",
"description": "PasswordView.tsx"
},
- "Include_special_symbols_one_time":
- {
+ "Include_special_symbols_one_time": {
"message": "Generate password with special symbols",
"description": "PasswordView.tsx"
},
- "Settings":
- {
+ "Settings": {
"message": "Settings",
"description": "SettingsSection.tsx"
},
- "Password_length":
- {
+ "Password_length": {
"message": "Password length",
"description": "SettingsSection.tsx"
},
- "Recommended_password_length":
- {
+ "Recommended_password_length": {
"message": "Recommended password length",
"description": "SettingsSection.tsx"
},
- "Character_options":
- {
+ "Character_options": {
"message": "Character options",
"description": "SettingsSection.tsx"
},
- "Include":
- {
+ "Include": {
"message": "Include",
"description": "SettingsSection.tsx"
},
- "Special_symbols":
- {
+ "Special_symbols": {
"message": "Special symbols",
"description": "SettingsSection.tsx"
},
- "Numeric":
- {
+ "Numeric": {
"message": "Numeric",
"description": "SettingsSection.tsx"
},
- "Uppercase":
- {
+ "Uppercase": {
"message": "Uppercase",
"description": "SettingsSection.tsx"
},
- "Lowercase":
- {
+ "Lowercase": {
"message": "Lowercase",
"description": "SettingsSection.tsx"
},
- "Exclude":
- {
+ "Exclude": {
"message": "Exclude",
"description": "SettingsSection.tsx"
},
- "Similar":
- {
+ "Similar": {
"message": "Similar",
"description": "SettingsSection.tsx"
},
- "Ambiguous":
- {
+ "Ambiguous": {
"message": "Ambiguous",
"description": "SettingsSection.tsx"
},
- "Repeating":
- {
+ "Repeating": {
"message": "Repeating",
"description": "SettingsSection.tsx"
},
- "Add_shortcut_to_context_menu":
- {
+ "Add_shortcut_to_context_menu": {
"message": "Add shortcut to context menu",
"description": "SettingsSection.tsx"
},
- "Right_click_password_field_to_quickly_generate_password":
- {
+ "Right_click_password_field_to_quickly_generate_password": {
"message": "Right-click password field to quickly generate password",
"description": "SettingsSection.tsx"
},
- "Automatically_copy_to_clipboard":
- {
+ "Automatically_copy_to_clipboard": {
"message": "Automatically copy to clipboard",
"description": "SettingsSection.tsx"
},
- "About":
- {
+ "About": {
"message": "About",
"description": "AboutSection.tsx"
},
- "Developed_by_Eugene_Fox":
- {
+ "Developed_by_Eugene_Fox": {
"message": "Developed by Eugene Fox",
"description": "AboutSection.tsx"
},
- "Licensed_under":
- {
+ "Licensed_under": {
"message": "Licensed under",
"description": "AboutSection.tsx"
},
- "MIT_license":
- {
+ "MIT_license": {
"message": "MIT license",
"description": "AboutSection.tsx"
},
- "Want_to_contribute_translation_for_your_language_":
- {
+ "Want_to_contribute_translation_for_your_language_": {
"message": "Want to contribute translation for your language?",
"description": "AboutSection.tsx"
},
- "Read_this_to_get_started":
- {
+ "Read_this_to_get_started": {
"message": "Read this to get started",
"description": "AboutSection.tsx"
},
- "My_website":
- {
+ "My_website": {
"message": "My website",
"description": "AboutSection.tsx"
},
- "Source_code":
- {
+ "Source_code": {
"message": "Source code",
"description": "AboutSection.tsx"
},
- "Changelog":
- {
+ "Changelog": {
"message": "Changelog",
"description": "AboutSection.tsx"
},
- "Leave_feedback":
- {
+ "Leave_feedback": {
"message": "Leave feedback",
"description": "AboutSection.tsx"
},
- "Buy_me_a_coffee":
- {
+ "Buy_me_a_coffee": {
"message": "Buy me a coffee",
"description": "AboutSection.tsx"
},
- "Set_name":
- {
+ "Set_name": {
"message": "Name",
"description": "CharacterHelpDialog.tsx"
},
- "Characters":
- {
+ "Characters": {
"message": "Characters",
"description": "CharacterHelpDialog.tsx"
},
- "__etc_":
- {
+ "__etc_": {
"message": ", etc.",
"description": "CharacterHelpDialog.tsx"
},
- "OK":
- {
+ "OK": {
"message": "OK",
"description": "CharacterHelpDialog.tsx"
},
- "Either_lowercase_or_uppercase_characters_must_be_included":
- {
+ "Either_lowercase_or_uppercase_characters_must_be_included": {
"message": "Either lowercase or uppercase characters must be included",
"description": "Generator.tsx"
},
- "Selected_length_is_too_long_to_exclude_repeating_characters":
- {
+ "Selected_length_is_too_long_to_exclude_repeating_characters": {
"message": "Selected length is too long to exclude repeating characters",
"description": "Generator.tsx"
},
- "Quick_generator_is_only_available_on_password_fields":
- {
+ "Quick_generator_is_only_available_on_password_fields": {
"message": "Quick generator is only available on password fields",
"description": "ContentService.tsx"
},
- "Quick_generate_password":
- {
+ "Quick_generate_password": {
"message": "Quick generate password",
"description": "BackgroundService.tsx"
}
diff --git a/public/_locales/pl/messages.json b/public/_locales/pl/messages.json
index 1091a09..b892782 100644
--- a/public/_locales/pl/messages.json
+++ b/public/_locales/pl/messages.json
@@ -1,216 +1,173 @@
{
- "name":
- {
+ "name": {
"message": "Generator haseł",
"description": "manifest.json"
},
- "description":
- {
+ "description": {
"message": "Rozszerzenie, które pozwala na łatwe generowanie trudnych i bezpiecznych haseł w jednym kliknięciu",
"description": "manifest.json"
},
- "author":
- {
+ "author": {
"message": "Jewgienij Lis",
"description": "manifest.json"
},
- "Password_generator":
- {
+ "Password_generator": {
"message": "Generator haseł",
"description": "App.tsx"
},
- "Copy":
- {
+ "Copy": {
"message": "Kopiuj",
"description": "PasswordView.tsx"
},
- "Generate_new":
- {
+ "Generate_new": {
"message": "Utwórz nowy",
"description": "PasswordView.tsx"
},
- "Exclude_special_symbols_one_time":
- {
+ "Exclude_special_symbols_one_time": {
"message": "Wygeneruj hasło bez znaków specjalnych",
"description": "PasswordView.tsx"
},
- "Include_special_symbols_one_time":
- {
+ "Include_special_symbols_one_time": {
"message": "Wygeneruj hasło z znakami specjalnymi",
"description": "PasswordView.tsx"
},
- "Settings":
- {
+ "Settings": {
"message": "Ustawienia",
"description": "SettingsSection.tsx"
},
- "Password_length":
- {
+ "Password_length": {
"message": "Długość hasła",
"description": "SettingsSection.tsx"
},
- "Recommended_password_length":
- {
+ "Recommended_password_length": {
"message": "Zalecana długość hasła",
"description": "SettingsSection.tsx"
},
- "Character_options":
- {
+ "Character_options": {
"message": "Ustawienia symboli",
"description": "SettingsSection.tsx"
},
- "Include":
- {
+ "Include": {
"message": "Włącz",
"description": "SettingsSection.tsx"
},
- "Special_symbols":
- {
+ "Special_symbols": {
"message": "Znaki specjalne",
"description": "SettingsSection.tsx"
},
- "Numeric":
- {
+ "Numeric": {
"message": "Liczby",
"description": "SettingsSection.tsx"
},
- "Uppercase":
- {
+ "Uppercase": {
"message": "Wielkie litery",
"description": "SettingsSection.tsx"
},
- "Lowercase":
- {
+ "Lowercase": {
"message": "Małe litery",
"description": "SettingsSection.tsx"
},
- "Exclude":
- {
+ "Exclude": {
"message": "Wyłącz",
"description": "SettingsSection.tsx"
},
- "Similar":
- {
+ "Similar": {
"message": "Podobne",
"description": "SettingsSection.tsx"
},
- "Ambiguous":
- {
+ "Ambiguous": {
"message": "Niebezpieczne",
"description": "SettingsSection.tsx"
},
- "Repeating":
- {
+ "Repeating": {
"message": "Powtarzające się",
"description": "SettingsSection.tsx"
},
- "Add_shortcut_to_context_menu":
- {
+ "Add_shortcut_to_context_menu": {
"message": "Dodaj rozszerzenie do menu kontekstowego",
"description": "SettingsSection.tsx"
},
- "Right_click_password_field_to_quickly_generate_password":
- {
+ "Right_click_password_field_to_quickly_generate_password": {
"message": "Kliknij prawym przyciskiem myszy w pole hasła, aby szybko wygenerować hasło",
"description": "SettingsSection.tsx"
},
- "Automatically_copy_to_clipboard":
- {
+ "Automatically_copy_to_clipboard": {
"message": "Automatycznie kopiuj do schowka",
"description": "SettingsSection.tsx"
},
- "About":
- {
+ "About": {
"message": "O rozszerzeniu",
"description": "AboutSection.tsx"
},
- "Developed_by_Eugene_Fox":
- {
+ "Developed_by_Eugene_Fox": {
"message": "Autor: Jewgienij Lis",
"description": "AboutSection.tsx"
},
- "Licensed_under":
- {
+ "Licensed_under": {
"message": "Licencja",
"description": "AboutSection.tsx"
},
- "MIT_license":
- {
+ "MIT_license": {
"message": "MIT",
"description": "AboutSection.tsx"
},
- "Want_to_contribute_translation_for_your_language_":
- {
+ "Want_to_contribute_translation_for_your_language_": {
"message": "Chcesz pomóc z tłumaczeniem na swój język?",
"description": "AboutSection.tsx"
},
- "Read_this_to_get_started":
- {
+ "Read_this_to_get_started": {
"message": "Przeczytaj ten artykuł",
"description": "AboutSection.tsx"
},
- "My_website":
- {
+ "My_website": {
"message": "Moja strona internetowa",
"description": "AboutSection.tsx"
},
- "Source_code":
- {
+ "Source_code": {
"message": "Kod źródłowy",
"description": "AboutSection.tsx"
},
- "Changelog":
- {
+ "Changelog": {
"message": "Lista zmian",
"description": "AboutSection.tsx"
},
- "Leave_feedback":
- {
+ "Leave_feedback": {
"message": "Zostaw opinię",
"description": "AboutSection.tsx"
},
- "Buy_me_a_coffee":
- {
+ "Buy_me_a_coffee": {
"message": "Wesprzyj",
"description": "AboutSection.tsx"
},
- "Set_name":
- {
+ "Set_name": {
"message": "Nazwa",
"description": "CharacterHelpDialog.tsx"
},
- "Characters":
- {
+ "Characters": {
"message": "Znaki",
"description": "CharacterHelpDialog.tsx"
},
- "__etc_":
- {
+ "__etc_": {
"message": " itp.",
"description": "CharacterHelpDialog.tsx"
},
- "OK":
- {
+ "OK": {
"message": "OK",
"description": "CharacterHelpDialog.tsx"
},
- "Either_lowercase_or_uppercase_characters_must_be_included":
- {
+ "Either_lowercase_or_uppercase_characters_must_be_included": {
"message": "Muszą być uwzględnione małe lub wielkie litery",
"description": "Generator.tsx"
},
- "Selected_length_is_too_long_to_exclude_repeating_characters":
- {
+ "Selected_length_is_too_long_to_exclude_repeating_characters": {
"message": "Wybrana długość jest zbyt długa, aby wykluczyć powtarzające się znaki",
"description": "Generator.tsx"
},
- "Quick_generator_is_only_available_on_password_fields":
- {
+ "Quick_generator_is_only_available_on_password_fields": {
"message": "Szybki generator jest dostępny tylko dla pól hasła",
"description": "ContentService.tsx"
},
- "Quick_generate_password":
- {
+ "Quick_generate_password": {
"message": "Wygeneruj hasło",
"description": "BackgroundService.tsx"
}
diff --git a/public/_locales/ru/messages.json b/public/_locales/ru/messages.json
index fea3ef8..2170e3c 100644
--- a/public/_locales/ru/messages.json
+++ b/public/_locales/ru/messages.json
@@ -1,216 +1,173 @@
{
- "name":
- {
+ "name": {
"message": "Генератор паролей",
"description": "manifest.json"
},
- "description":
- {
+ "description": {
"message": "Расширение, позволяющее легко генерировать сложные и надежные пароли в один клик",
"description": "manifest.json"
},
- "author":
- {
+ "author": {
"message": "Евгений Лис",
"description": "manifest.json"
},
- "Password_generator":
- {
+ "Password_generator": {
"message": "Генератор паролей",
"description": "App.tsx"
},
- "Copy":
- {
+ "Copy": {
"message": "Копировать",
"description": "PasswordView.tsx"
},
- "Generate_new":
- {
+ "Generate_new": {
"message": "Создать новый",
"description": "PasswordView.tsx"
},
- "Exclude_special_symbols_one_time":
- {
+ "Exclude_special_symbols_one_time": {
"message": "Сгенерировать пароль без спецсимволов",
"description": "PasswordView.tsx"
},
- "Include_special_symbols_one_time":
- {
+ "Include_special_symbols_one_time": {
"message": "Сгенерировать пароль со спецсимволами",
"description": "PasswordView.tsx"
},
- "Settings":
- {
+ "Settings": {
"message": "Настройки",
"description": "SettingsSection.tsx"
},
- "Password_length":
- {
+ "Password_length": {
"message": "Длина пароля",
"description": "SettingsSection.tsx"
},
- "Recommended_password_length":
- {
+ "Recommended_password_length": {
"message": "Рекомендуемая длина пароля",
"description": "SettingsSection.tsx"
},
- "Character_options":
- {
+ "Character_options": {
"message": "Настройки символов",
"description": "SettingsSection.tsx"
},
- "Include":
- {
+ "Include": {
"message": "Включить",
"description": "SettingsSection.tsx"
},
- "Special_symbols":
- {
+ "Special_symbols": {
"message": "Специальные символы",
"description": "SettingsSection.tsx"
},
- "Numeric":
- {
+ "Numeric": {
"message": "Цифры",
"description": "SettingsSection.tsx"
},
- "Uppercase":
- {
+ "Uppercase": {
"message": "Прописные буквы",
"description": "SettingsSection.tsx"
},
- "Lowercase":
- {
+ "Lowercase": {
"message": "Строчные буквы",
"description": "SettingsSection.tsx"
},
- "Exclude":
- {
+ "Exclude": {
"message": "Исключить",
"description": "SettingsSection.tsx"
},
- "Similar":
- {
+ "Similar": {
"message": "Похожие",
"description": "SettingsSection.tsx"
},
- "Ambiguous":
- {
+ "Ambiguous": {
"message": "Особые",
"description": "SettingsSection.tsx"
},
- "Repeating":
- {
+ "Repeating": {
"message": "Повторяющиеся",
"description": "SettingsSection.tsx"
},
- "Add_shortcut_to_context_menu":
- {
+ "Add_shortcut_to_context_menu": {
"message": "Добавить расширение в контекстное меню",
"description": "SettingsSection.tsx"
},
- "Right_click_password_field_to_quickly_generate_password":
- {
+ "Right_click_password_field_to_quickly_generate_password": {
"message": "Щелкните правой кнопкой мыши по полю ввода пароля, чтобы быстро сгенерировать пароль",
"description": "SettingsSection.tsx"
},
- "Automatically_copy_to_clipboard":
- {
+ "Automatically_copy_to_clipboard": {
"message": "Автоматически копировать в буфер обмена",
"description": "SettingsSection.tsx"
},
- "About":
- {
+ "About": {
"message": "О расширении",
"description": "AboutSection.tsx"
},
- "Developed_by_Eugene_Fox":
- {
+ "Developed_by_Eugene_Fox": {
"message": "Разработчик Евгений Лис",
"description": "AboutSection.tsx"
},
- "Licensed_under":
- {
+ "Licensed_under": {
"message": "Лицензия",
"description": "AboutSection.tsx"
},
- "MIT_license":
- {
+ "MIT_license": {
"message": "MIT",
"description": "AboutSection.tsx"
},
- "Want_to_contribute_translation_for_your_language_":
- {
+ "Want_to_contribute_translation_for_your_language_": {
"message": "Хотите помочь с переводом на свой язык?",
"description": "AboutSection.tsx"
},
- "Read_this_to_get_started":
- {
+ "Read_this_to_get_started": {
"message": "Прочтите эту статью",
"description": "AboutSection.tsx"
},
- "My_website":
- {
+ "My_website": {
"message": "Мой сайт",
"description": "AboutSection.tsx"
},
- "Source_code":
- {
+ "Source_code": {
"message": "Исходный код",
"description": "AboutSection.tsx"
},
- "Changelog":
- {
+ "Changelog": {
"message": "Список изменений",
"description": "AboutSection.tsx"
},
- "Leave_feedback":
- {
+ "Leave_feedback": {
"message": "Оставить отзыв",
"description": "AboutSection.tsx"
},
- "Buy_me_a_coffee":
- {
+ "Buy_me_a_coffee": {
"message": "Спонсировать",
"description": "AboutSection.tsx"
},
- "Set_name":
- {
+ "Set_name": {
"message": "Название",
"description": "CharacterHelpDialog.tsx"
},
- "Characters":
- {
+ "Characters": {
"message": "Символы",
"description": "CharacterHelpDialog.tsx"
},
- "__etc_":
- {
+ "__etc_": {
"message": " и т.д.",
"description": "CharacterHelpDialog.tsx"
},
- "OK":
- {
+ "OK": {
"message": "ОК",
"description": "CharacterHelpDialog.tsx"
},
- "Either_lowercase_or_uppercase_characters_must_be_included":
- {
+ "Either_lowercase_or_uppercase_characters_must_be_included": {
"message": "Должны быть включены строчные или прописные буквы",
"description": "Generator.tsx"
},
- "Selected_length_is_too_long_to_exclude_repeating_characters":
- {
+ "Selected_length_is_too_long_to_exclude_repeating_characters": {
"message": "Выбранная длина слишком велика для исключения повторяющихся символов",
"description": "Generator.tsx"
},
- "Quick_generator_is_only_available_on_password_fields":
- {
+ "Quick_generator_is_only_available_on_password_fields": {
"message": "Быстрый генератор доступен только для полей ввода пароля",
"description": "ContentService.tsx"
},
- "Quick_generate_password":
- {
+ "Quick_generate_password": {
"message": "Сгенерировать пароль",
"description": "BackgroundService.tsx"
}
diff --git a/public/_locales/uk/messages.json b/public/_locales/uk/messages.json
index 353bd6e..d5993d1 100644
--- a/public/_locales/uk/messages.json
+++ b/public/_locales/uk/messages.json
@@ -1,216 +1,173 @@
{
- "name":
- {
+ "name": {
"message": "Генератор паролів",
"description": "manifest.json"
},
- "description":
- {
+ "description": {
"message": "Розширення, яке дозволяє легко генерувати складні та надійні паролі в один клік",
"description": "manifest.json"
},
- "author":
- {
+ "author": {
"message": "Євген Лис",
"description": "manifest.json"
},
- "Password_generator":
- {
+ "Password_generator": {
"message": "Генератор паролів",
"description": "App.tsx"
},
- "Copy":
- {
+ "Copy": {
"message": "Копіювати",
"description": "PasswordView.tsx"
},
- "Generate_new":
- {
+ "Generate_new": {
"message": "Генерувати новий",
"description": "PasswordView.tsx"
},
- "Exclude_special_symbols_one_time":
- {
+ "Exclude_special_symbols_one_time": {
"message": "Генерувати пароль без спеціальних символів",
"description": "PasswordView.tsx"
},
- "Include_special_symbols_one_time":
- {
+ "Include_special_symbols_one_time": {
"message": "Генерувати пароль з спеціальними символами",
"description": "PasswordView.tsx"
},
- "Settings":
- {
+ "Settings": {
"message": "Налаштування",
"description": "SettingsSection.tsx"
},
- "Password_length":
- {
+ "Password_length": {
"message": "Довжина паролю",
"description": "SettingsSection.tsx"
},
- "Recommended_password_length":
- {
+ "Recommended_password_length": {
"message": "Рекомендована довжина паролю",
"description": "SettingsSection.tsx"
},
- "Character_options":
- {
+ "Character_options": {
"message": "Параметри символів",
"description": "SettingsSection.tsx"
},
- "Include":
- {
+ "Include": {
"message": "Включити",
"description": "SettingsSection.tsx"
},
- "Special_symbols":
- {
+ "Special_symbols": {
"message": "Спеціальні символи",
"description": "SettingsSection.tsx"
},
- "Numeric":
- {
+ "Numeric": {
"message": "Цифри",
"description": "SettingsSection.tsx"
},
- "Uppercase":
- {
+ "Uppercase": {
"message": "Великі літери",
"description": "SettingsSection.tsx"
},
- "Lowercase":
- {
+ "Lowercase": {
"message": "Малі літери",
"description": "SettingsSection.tsx"
},
- "Exclude":
- {
+ "Exclude": {
"message": "Виключити",
"description": "SettingsSection.tsx"
},
- "Similar":
- {
+ "Similar": {
"message": "Схожі",
"description": "SettingsSection.tsx"
},
- "Ambiguous":
- {
+ "Ambiguous": {
"message": "Особливі",
"description": "SettingsSection.tsx"
},
- "Repeating":
- {
+ "Repeating": {
"message": "Повторювані",
"description": "SettingsSection.tsx"
},
- "Add_shortcut_to_context_menu":
- {
+ "Add_shortcut_to_context_menu": {
"message": "Додати розширення до контекстного меню",
"description": "SettingsSection.tsx"
},
- "Right_click_password_field_to_quickly_generate_password":
- {
+ "Right_click_password_field_to_quickly_generate_password": {
"message": "Правий клік на поле вводу паролю для швидкого генерування паролю",
"description": "SettingsSection.tsx"
},
- "Automatically_copy_to_clipboard":
- {
+ "Automatically_copy_to_clipboard": {
"message": "Автоматично копіювати в буфер обміну",
"description": "SettingsSection.tsx"
},
- "About":
- {
+ "About": {
"message": "Про розширення",
"description": "AboutSection.tsx"
},
- "Developed_by_Eugene_Fox":
- {
+ "Developed_by_Eugene_Fox": {
"message": "Розроблено Євгеном Лисом",
"description": "AboutSection.tsx"
},
- "Licensed_under":
- {
+ "Licensed_under": {
"message": "Ліцензовано під",
"description": "AboutSection.tsx"
},
- "MIT_license":
- {
+ "MIT_license": {
"message": "MIT",
"description": "AboutSection.tsx"
},
- "Want_to_contribute_translation_for_your_language_":
- {
+ "Want_to_contribute_translation_for_your_language_": {
"message": "Хочете допомогти перекласти розширення на свою мову?",
"description": "AboutSection.tsx"
},
- "Read_this_to_get_started":
- {
+ "Read_this_to_get_started": {
"message": "Прочитайте цю статтю",
"description": "AboutSection.tsx"
},
- "My_website":
- {
+ "My_website": {
"message": "Моя веб-сторінка",
"description": "AboutSection.tsx"
},
- "Source_code":
- {
+ "Source_code": {
"message": "Вихідний код",
"description": "AboutSection.tsx"
},
- "Changelog":
- {
+ "Changelog": {
"message": "Список змін",
"description": "AboutSection.tsx"
},
- "Leave_feedback":
- {
+ "Leave_feedback": {
"message": "Залишити відгук",
"description": "AboutSection.tsx"
},
- "Buy_me_a_coffee":
- {
+ "Buy_me_a_coffee": {
"message": "Підтримати",
"description": "AboutSection.tsx"
},
- "Set_name":
- {
+ "Set_name": {
"message": "Назва",
"description": "CharacterHelpDialog.tsx"
},
- "Characters":
- {
+ "Characters": {
"message": "Символи",
"description": "CharacterHelpDialog.tsx"
},
- "__etc_":
- {
+ "__etc_": {
"message": " і т.д.",
"description": "CharacterHelpDialog.tsx"
},
- "OK":
- {
+ "OK": {
"message": "OK",
"description": "CharacterHelpDialog.tsx"
},
- "Either_lowercase_or_uppercase_characters_must_be_included":
- {
+ "Either_lowercase_or_uppercase_characters_must_be_included": {
"message": "Повинні бути включені малі або великі літери",
"description": "Generator.tsx"
},
- "Selected_length_is_too_long_to_exclude_repeating_characters":
- {
+ "Selected_length_is_too_long_to_exclude_repeating_characters": {
"message": "Вибрана довжина занадто велика для виключення повторюваних символів",
"description": "Generator.tsx"
},
- "Quick_generator_is_only_available_on_password_fields":
- {
+ "Quick_generator_is_only_available_on_password_fields": {
"message": "Швидкий генератор доступний тільки для полів вводу паролів",
"description": "ContentService.tsx"
},
- "Quick_generate_password":
- {
+ "Quick_generate_password": {
"message": "Згенерувати пароль",
"description": "BackgroundService.tsx"
}
diff --git a/public/index.html b/public/index.html
index 404eb2e..810899c 100644
--- a/public/index.html
+++ b/public/index.html
@@ -2,9 +2,12 @@
- Password Generator
-
+ Password Generator
+
diff --git a/public/manifest.json b/public/manifest.json
index 3c9f0ab..d1242be 100644
--- a/public/manifest.json
+++ b/public/manifest.json
@@ -1,56 +1,39 @@
{
- "$schema": "https://json.schemastore.org/chrome-manifest.json",
"manifest_version": 3,
-
"name": "__MSG_name__",
"description": "__MSG_description__",
"author": "__MSG_author__",
-
"version": "2.0.0",
"default_locale": "en",
-
- "permissions":
- [
+ "permissions": [
"storage",
"contextMenus",
"clipboardWrite"
],
-
- "background":
- {
+ "background": {
"service_worker": "./static/js/background.js",
"type": "module"
},
- "content_scripts":
- [
+ "content_scripts": [
{
- "matches": [ "" ],
- "js": [ "./static/js/contentScript.js" ],
+ "matches": [
+ ""
+ ],
+ "js": [
+ "./static/js/contentScript.js"
+ ],
"run_at": "document_idle",
"all_frames": true
}
],
-
- "action":
- {
+ "action": {
"default_popup": "index.html",
"default_title": "__MSG_name__"
},
-
- "icons":
- {
+ "icons": {
"128": "icons/icon-128.png",
"48": "icons/icon-48.png",
"32": "icons/icon-32.png",
"16": "icons/icon-16.png"
- },
-
- "browser_specific_settings":
- {
- "gecko":
- {
- "id": "passwordgenerator@xfox111.net",
- "strict_min_version": "58.0"
- }
}
}
diff --git a/public/manifest.firefox.json b/public/manifest.v2.json
similarity index 63%
rename from public/manifest.firefox.json
rename to public/manifest.v2.json
index 313108a..db95634 100644
--- a/public/manifest.firefox.json
+++ b/public/manifest.v2.json
@@ -1,54 +1,45 @@
{
- "$schema": "https://json.schemastore.org/chrome-manifest.json",
"manifest_version": 2,
-
"name": "__MSG_name__",
"description": "__MSG_description__",
"author": "__MSG_author__",
-
"version": "2.0.0",
"default_locale": "en",
-
- "permissions":
- [
+ "permissions": [
"storage",
"contextMenus",
"clipboardWrite"
],
-
- "background":
- {
- "scripts": [ "./static/js/background.js" ],
+ "background": {
+ "scripts": [
+ "./static/js/background.js"
+ ],
"persistent": true
},
- "content_scripts":
- [
+ "content_scripts": [
{
- "matches": [ "" ],
- "js": [ "./static/js/contentScript.js" ],
+ "matches": [
+ ""
+ ],
+ "js": [
+ "./static/js/contentScript.js"
+ ],
"run_at": "document_idle",
"all_frames": true
}
],
-
- "browser_action":
- {
+ "browser_action": {
"default_popup": "index.html",
"default_title": "__MSG_name__"
},
-
- "icons":
- {
+ "icons": {
"128": "icons/icon-128.png",
"48": "icons/icon-48.png",
"32": "icons/icon-32.png",
"16": "icons/icon-16.png"
},
-
- "browser_specific_settings":
- {
- "gecko":
- {
+ "browser_specific_settings": {
+ "gecko": {
"id": "passwordgenerator@xfox111.net",
"strict_min_version": "58.0"
}
diff --git a/src/App.scss b/src/App.scss
index 0a56406..4c10a7a 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -49,6 +49,7 @@ main
animation-timing-function: var(--curveEasyEaseMax);
animation-duration: .5s;
}
+
@keyframes scaleUpInAnim
{
from
@@ -56,6 +57,7 @@ main
transform: scale(.5);
opacity: 0;
}
+
to
{
transform: scale(1);
@@ -69,12 +71,14 @@ main
animation-timing-function: var(--curveEasyEaseMax);
animation-duration: .5s;
}
+
@keyframes spinAnim
{
from
{
transform: rotate(0deg);
}
+
to
{
transform: rotate(360deg);
@@ -87,12 +91,14 @@ main
animation-timing-function: var(--curveDecelerateMin);
animation-duration: .5s;
}
+
@keyframes fadeInAnim
{
from
{
opacity: 0;
}
+
to
{
opacity: 1;
diff --git a/src/Assets/BuyMeACoffee.svg b/src/Assets/BuyMeACoffee.svg
index 126a7f4..5f5c7c8 100644
--- a/src/Assets/BuyMeACoffee.svg
+++ b/src/Assets/BuyMeACoffee.svg
@@ -1,5 +1,4 @@
-