diff --git a/_locales/en/messages.json b/_locales/en/messages.json index a40006e..fef694e 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -29,6 +29,11 @@ "message": "Invalid generator settings. No password was generated", "description": "Message which is shown after a creation of password failed" }, + "lengthPrompt": + { + "message": "Set password length. Press OK to use default password length (%LEN% characters)", + "description": "A prompt message when user generates a password" + }, "generatorOptions": { @@ -91,6 +96,16 @@ "message": "Add \"Generate password\" action to context menu", "description": "Option checkbox label" }, + "hideAlert": + { + "message": "Hide successful password generation message", + "description": "Option checkbox label" + }, + "promptForLength": + { + "message": "Prompt for password length every time before generating", + "description": "Option checkbox label" + }, "more": { "message": "More", diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index a9664c7..d504eb5 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -29,6 +29,11 @@ "message": "Установлены неправильные настройки генератора. Ничего не было сгенерировано", "description": "Message which is shown after a creation of password failed" }, + "lengthPrompt": + { + "message": "Укажите длину пароля. Нажмите ОК чтобы использовать длину по умолчанию (%LEN% символов)", + "description": "A prompt message when user generates a password" + }, "generatorOptions": { @@ -91,6 +96,16 @@ "message": "Добавить действие \"Сгенерировать пароль\" в контекстное меню браузера", "description": "Option checkbox label" }, + "hideAlert": + { + "message": "Не показывать сообщение при генерации пароля", + "description": "Option checkbox label" + }, + "promptForLength": + { + "message": "Спрашивать длину пароля перед генерацией", + "description": "Option checkbox label" + }, "more": { "message": "Больше", diff --git a/js/options.js b/js/options.js index 33bf283..f9651a6 100644 --- a/js/options.js +++ b/js/options.js @@ -13,7 +13,9 @@ chrome.storage.sync.get( // Extension settings showButton: true, - showContext: true + showContext: true, + hideAlert: false, + promptForLength: false }, (settings) => { @@ -32,7 +34,9 @@ chrome.storage.sync.get( "excludeSpecial", "showButton", - "showContext" + "showContext", + "hideAlert", + "promptForLength" ].forEach(i => document.querySelector("#" + i).checked = settings[i]); SetupEventHandlers(); @@ -46,7 +50,7 @@ function SetupEventHandlers() i.addEventListener("input", () => chrome.storage.sync.set(JSON.parse("{ \"" + i.id + "\": " + (i.type == "checkbox" ? i.checked : i.value) + " }")))); - document.querySelector("#generate").addEventListener("click", () => GeneratePassword(null)); + document.querySelector("#generate").addEventListener("click", () => GeneratePassword(null, true)); document.querySelector("#more").addEventListener("click", (s) => { let group = document.querySelector("#about"); diff --git a/js/script.js b/js/script.js index 867298a..659e8a0 100644 --- a/js/script.js +++ b/js/script.js @@ -34,7 +34,7 @@ function InsertButtons() }); } -function GeneratePassword(e) +function GeneratePassword(e, useDefaultLength = false) { // Generating password let availableCharacters = ""; // Set of available characters to generate a password from @@ -47,7 +47,9 @@ function GeneratePassword(e) includeLowercase: true, includeUppercase: true, excludeSimilar: true, - excludeSpecial: true + excludeSpecial: true, + hideAlert: false, + promptForLength: false }, (settings) => { @@ -72,7 +74,24 @@ function GeneratePassword(e) } let password = ""; - for (k = 0; k < settings.length; k++) + var pwdLength = settings.length; + if (settings.promptForLength && !useDefaultLength) + while(true) + { + var response = prompt(chrome.i18n.getMessage("lengthPrompt").replace("%LEN%", settings.length)); + if (response === null) // If user clicked 'Cancel' + return; + + if (parseInt(response)) + { + pwdLength = response; + break; + } + else if (!response) // Continue with default length if no response is provided. Try again if input is invalid + break; + } + + for (k = 0; k < pwdLength; k++) password += availableCharacters[GetRandomInt(0, availableCharacters.length)]; // Picking random characters let field = e?.target.previousElementSibling; @@ -97,7 +116,8 @@ function GeneratePassword(e) if (!e) field.remove(); - alert(chrome.i18n.getMessage("success")); + if (settings.hideAlert === false) + alert(chrome.i18n.getMessage("success")); }); } diff --git a/manifest.json b/manifest.json index d12e1b4..305d673 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "__MSG_name__", - "version": "1.0", + "version": "1.1", "manifest_version": 2, "description": "__MSG_description__", "author": "__MSG_author__", diff --git a/options.html b/options.html index d20d53f..ddbc0d0 100644 --- a/options.html +++ b/options.html @@ -68,6 +68,16 @@ Add "Generate password" action to context menu + +