diff --git a/CHANGELOG.md b/CHANGELOG.md index 29c6fab..0eee2bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,16 +3,24 @@ 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). -## [1.1.3] - 2023-06-05 +## [1.1.4] - 2023-07-25 ### Added +- Added Slovenian (sl) translation (#6); thank you Gregor Godler +- Added missing Hungarian (hu) translation (#5) in meta description + +### Changed +- Some minor typeface (font) changes to play better with iOS/macOS browsers +- Some minor UI changes to make password strength indicator more clear + +## [1.1.3] - 2023-06-05 +### Added - Added Hungarian (hu) translation (#5); thank you Mihaly Balassy ## [1.1.2] - 2023-02-21 ### Added - - Added Luxembourgish (lb) translation (#2); thank you Alain Fontaine - Added French (fr) translation (#3); thank you Alain Fontaine - Added Finnish (fi) translation (PR#3); thank you Thomas Raehalme @@ -20,7 +28,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [1.1.1] - 2023-01-23 ### Added - - Added Dutch translation (#1); thank you Jeroen van de Leur ## [1.1.0] - 2022-10-24 diff --git a/README.md b/README.md index cad972a..7c0fe49 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,9 @@ Thanks to **Peter Hampf** (hello `O/T-Track` :metal:) for the German translation Thanks to **Jeroen van de Leur** for the Dutch translation :blush: Thanks to **Alain Fontaine** for the French and Luxembourgish translations :blush: Thanks to **Thomas Raehalme** for the Finnish translations :blush: +Thanks to **Mihaly Balassy** for the Hungarian translations :blush: +Thanks to **Gregor Godler** for the Slovenian translations :blush: +Thanks for **Sarah Bailey** for assistance in "debugging" use on iOS/macOS :blush: The "cloud icon" comes from [Streamline](https://streamlinehq.com) diff --git a/css/password-om.css b/css/password-om.css index 0f027db..a9efa88 100644 --- a/css/password-om.css +++ b/css/password-om.css @@ -45,11 +45,16 @@ html { background-color:var(--pom-bg-color-normal); color:var(--pom-fg-color-normal); } + +html * { + font-family: "SF Mono", SFMono-Regular, ui-monospace, "Lucida Sans Typewriter", "Lucida Console", "Bitstream Vera Sans Mono", monospace; +} + body { padding:0px; margin:0px; - font-family: "Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace; } + h1, h2 { color:var(--pom-h-color); } @@ -105,7 +110,7 @@ a:hover { } #mk-password-field { width:98% !important; - border:2px solid var(--pom-mk-password-field-border); + border:2px solid var(--pom-mk-password-field-border) !important; border-radius:5px !important; } .mk-password-field-focus { @@ -119,9 +124,10 @@ a:hover { cursor:pointer !important; } #mk-password-good { - width:100% !important; - height:48px; - margin-top:10px; + width:98% !important; + height:1.1rem !important; + margin-top:10px !important; + border:2px solid var(--pom-mk-password-field-border) !important; } #mk-password-len-slider { -webkit-appearance:none; @@ -170,9 +176,11 @@ a:hover { #mk-password-btn-div { text-align:right; margin-bottom:10px; + line-height:1.4rem !important; } #mk-password-btn { - width:60px; + padding-top:3px !important; + width:70px !important; font-size:1.4rem !important; line-height:1.4rem !important; font-weight:bold; @@ -206,6 +214,7 @@ a:hover { .selection-col { text-align:right; justify-self:end; + width:70px !important; } .check-option { width:28px; diff --git a/index.html b/index.html index 830fdb6..bc9b942 100644 --- a/index.html +++ b/index.html @@ -2,26 +2,29 @@ - - - - - - - - - - - + + + + + + + + + + + + + POMjs - Random Password Generator POMjs - Slumpmässigt Lösenord POMjs - Zufallsgenerator für Passwörter - POMjs - Véletlenszerű jelszógenerátor + POMjs - Véletlenszerű jelszógenerátor POMjs - Willekeurig Wachtwoordgenerator POMjs - Zoufallspasswuertgenerator POMjs - Générateur de mot de passe au hazard - POMjs - Salasanageneraattori + POMjs - Salasanageneraattori + POMjs - Generator Naključnih Gesel @@ -52,7 +55,7 @@ -

POMjs by Joaquim Homrighausen, get it at GitHub (GPLv2)

+

Website hosted by WebbPlatsen i Sverige AB

+

POMjs 1.1.4 by Joaquim Homrighausen, get it at GitHub (GPLv2)

diff --git a/js/password-om.js b/js/password-om.js index ad83fd5..2bf8b6d 100644 --- a/js/password-om.js +++ b/js/password-om.js @@ -1,5 +1,5 @@ /** - * POMjs 1.1.3 + * POMjs 1.1.4 * * password-om.js * @@ -362,6 +362,12 @@ function POM_initialSetup() { POM_cfgSlogan = 'Ei evästeitä, ei seurantaa.
Vain salasanoja.'; POM_cfgGenPasswordHint = 'Generoi salasana'; break; + case 'sl': + /* Thank you Gregor Godler */ + POM_cfgTitle = 'Generator Naključnih Gesel'; + POM_cfgSlogan = 'Brez piškotkov, nič sledilnikov.
Samo geslo.'; + POM_cfgGenPasswordHint = 'Generiraj geslo'; + break; default: POM_cfgTitle = 'Random Password Generator'; POM_cfgSlogan = 'No cookies, no trackers.
Just passwords.'; diff --git a/js/password-om.min.js b/js/password-om.min.js index 8589525..56b5a3f 100644 --- a/js/password-om.min.js +++ b/js/password-om.min.js @@ -1 +1 @@ -var POM_cfgLanguage="noLang?",POM_cfgTitle="noTitle?",POM_cfgSlogan="noSlogan?",POM_cfgGenPasswordHint="noHint?";const POM_strUppercase=POM_genAlphabet(!0),POM_strLowercase=POM_genAlphabet(!1),POM_strDigits=POM_genDigits(),POM_strSpecialOne="-._#$@%!",POM_strSpecialTwo='"+(){}[]?&,*<>|:;^',POM_strUppercase_Default=!0,POM_strLowercase_Default=!0,POM_strDigits_Default=!0,POM_strSpecialOne_Default=!0,POM_strSpecialTwo_Default=!1,POM_mkPasswordOnLoad=!0,POM_changeIsClick=!0,POM_minLength=16,POM_maxLength=256,POM_sliderStep=8,POM_debug=!1;function POM_genAlphabet(e=!1){return[...Array(26)].map((t,n)=>String.fromCharCode(n+(e?65:97))).join("")}function POM_genDigits(){return[...Array(10)].map((e,t)=>String.fromCharCode(t+48)).join("")}function POM_distillString(e){return e=e.split(""),e=[...e=new Set(e)].join("+")}function POM_escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function POM_validateNumInput(){let e=document.getElementById("mk-password-len-slider");e&&(""===this.value&&(this.value=16),e.value=this.value,e.value<16?e.value=16:e.value>256&&(e.value=256),this.value=e.value),document.getElementById("mk-password-btn").click()}function POM_generatePassword(){let e=document.getElementById("mk-password-strength");e.style.background="inherit",e.style.width="0",e.style.transition="none";let t=document.getElementById("mk-password-field");t.value="",t.classList.remove("mk-password-field-focus");let n=document.getElementById("mk-length-field");if(n&&n.value>=16&&n.value<=256){let s="";if(document.getElementById("mk-uppercase-select").checked&&(s+=POM_strUppercase),document.getElementById("mk-special-one-select").checked&&(s+=POM_strSpecialOne+POM_strSpecialOne),document.getElementById("mk-digits-select").checked&&(s+=POM_strDigits),document.getElementById("mk-lowercase-select").checked&&(s+=POM_strLowercase),document.getElementById("mk-digits-select").checked&&(s+=POM_strDigits),document.getElementById("mk-special-two-select").checked&&(s+=POM_strSpecialTwo+POM_strSpecialTwo),s.length>0){let a="",l="";for(let i=0;i7&&c++,a.length>15&&c++,a.length>31&&(c+=2),a.length>63&&(c+=4),c>8&&(c=8),c>6?e.style.background="#27ce60":c>5?e.style.background="#27ae60":c>3?e.style.background="#FFC300":e.style.background="#C0392B",e.style.width=12.5*c+"%",e.style.transition="width 0.3s ease-in"}}}function POM_copyPassword(){let e=document.getElementById("mk-password-field");if(e&&e.value.length>0){if(navigator&&navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(e.value).then(function(){e.classList.add("mk-password-field-focus")},function(e){alert("Could not copy text: "+e)});else{var t=document.createElement("textarea");t.value=e.value,t.setAttribute("readonly",""),t.style.position="absolute",t.style.top="-6969px",t.style.left="-6969px",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy")?e.classList.add("mk-password-field-focus"):alert("That did not work")}catch(n){alert("Could not copy text: "+n.message)}document.body.removeChild(t)}}}function POM_initialSetup(){if(navigator.language){let e=(POM_cfgLanguage=navigator.language).indexOf("-");e&&e>0&&(POM_cfgLanguage=POM_cfgLanguage.substring(0,e)),POM_cfgLanguage=POM_cfgLanguage.toLowerCase()}else POM_cfgLanguage="???";switch(POM_cfgLanguage){case"sv":case"se":POM_cfgTitle="Slumpm\xe4ssigt L\xf6senord",POM_cfgSlogan='Inga kakor, ingen sp\xe5rning.
Bara l\xf6senord.',POM_cfgGenPasswordHint="Generera l\xf6senord";break;case"de":POM_cfgTitle="Zufallsgenerator f\xfcr Passw\xf6rter",POM_cfgSlogan='Keine Cookies, keine Tracker.
Nur Passw\xf6rter.',POM_cfgGenPasswordHint="Passwort generieren";break;case"hu":POM_cfgTitle="V\xe9letlenszerű jelsz\xf3gener\xe1tor",POM_cfgSlogan='Cookie-k n\xe9lk\xfcl, nyomk\xf6vetők n\xe9lk\xfcl.
Csak jelszavak.',POM_cfgGenPasswordHint="Jelsz\xf3 gener\xe1l\xe1sa";break;case"nl":POM_cfgTitle="Willekeurig Wachtwoord Generator",POM_cfgSlogan='Geen cookies, geen trackers.
Uitsluitend wachtwoorden.',POM_cfgGenPasswordHint="Genereer wachtwoord";break;case"lb":POM_cfgTitle="Zoufallspasswuertgenerator",POM_cfgSlogan='Keng Cookien, keng Trackeren.
Nemme Passwierder.',POM_cfgGenPasswordHint="Passwuert genereieren";break;case"fr":POM_cfgTitle="G\xe9n\xe9rateur de mot de passe au hazard",POM_cfgSlogan='Pas de cookies, pas de traceurs.
Juste des mots de passe.',POM_cfgGenPasswordHint="G\xe9n\xe9rer mot de passe";break;case"fi":POM_cfgTitle="Salasanageneraattori",POM_cfgSlogan='Ei ev\xe4steit\xe4, ei seurantaa.
Vain salasanoja.',POM_cfgGenPasswordHint="Generoi salasana";break;default:POM_cfgTitle="Random Password Generator",POM_cfgSlogan='No cookies, no trackers.
Just passwords.',POM_cfgGenPasswordHint="Generate password"}document.getElementById("cfg-page-title").innerHTML=POM_cfgTitle,document.getElementById("cfg-page-slogan").innerHTML=POM_cfgSlogan,document.getElementById("cfg-page-lang").innerHTML="["+POM_cfgLanguage+"]",document.getElementById("mk-password-btn").title=POM_cfgGenPasswordHint,document.getElementById("mk-uppercase-select").checked=!0,document.getElementById("mk-lowercase-select").checked=!0,document.getElementById("mk-digits-select").checked=!0,document.getElementById("mk-special-one-select").checked=!0,document.getElementById("mk-special-two-select").checked=!1,document.getElementById("mk-password-field").value="";let t=document.getElementById("mk-password-len-slider");t&&(t.value=16,t.setAttribute("min",16),t.setAttribute("max",256),t.step=8),document.getElementById("mk-length-field").value=16,document.getElementById("gen-uppercase").innerText=POM_strUppercase,document.getElementById("gen-lowercase").innerText=POM_strLowercase,document.getElementById("gen-digits").innerText=POM_strDigits,document.getElementById("gen-special-one").innerText=POM_strSpecialOne,document.getElementById("gen-special-two").innerText=POM_strSpecialTwo,document.getElementById("gen-timestamp").innerText=Date.now(),document.getElementById("mk-password-len-slider").addEventListener("input",function(){let e=document.getElementById("mk-length-field");e&&(e.value=this.value,e.value<16?e.value=16:e.value>256&&(e.value=256),this.value=e.value)}),document.getElementById("mk-length-field").addEventListener("click",function(){this.select()}),document.getElementById("mk-length-field").addEventListener("blur",POM_validateNumInput),document.getElementById("mk-length-field").addEventListener("change",POM_validateNumInput),document.getElementById("mk-password-btn").addEventListener("click",POM_generatePassword),document.getElementById("mk-password-field").addEventListener("click",POM_copyPassword),document.getElementById("mk-password-btn").click(),document.getElementById("mk-uppercase-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-special-one-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-digits-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-lowercase-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-digits-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-special-two-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-password-len-slider").addEventListener("change",POM_generatePassword)}"complete"!==document.readyState&&("loading"===document.readyState||document.documentElement.doScroll)?document.addEventListener("DOMContentLoaded",POM_initialSetup):POM_initialSetup(); \ No newline at end of file +var POM_cfgLanguage="noLang?",POM_cfgTitle="noTitle?",POM_cfgSlogan="noSlogan?",POM_cfgGenPasswordHint="noHint?";const POM_strUppercase=POM_genAlphabet(!0),POM_strLowercase=POM_genAlphabet(!1),POM_strDigits=POM_genDigits(),POM_strSpecialOne="-._#$@%!",POM_strSpecialTwo='"+(){}[]?&,*<>|:;^',POM_strUppercase_Default=!0,POM_strLowercase_Default=!0,POM_strDigits_Default=!0,POM_strSpecialOne_Default=!0,POM_strSpecialTwo_Default=!1,POM_mkPasswordOnLoad=!0,POM_changeIsClick=!0,POM_minLength=16,POM_maxLength=256,POM_sliderStep=8,POM_debug=!1;function POM_genAlphabet(e=!1){return[...Array(26)].map((t,n)=>String.fromCharCode(n+(e?65:97))).join("")}function POM_genDigits(){return[...Array(10)].map((e,t)=>String.fromCharCode(t+48)).join("")}function POM_distillString(e){return e=e.split(""),e=[...e=new Set(e)].join("+")}function POM_escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function POM_validateNumInput(){let e=document.getElementById("mk-password-len-slider");e&&(""===this.value&&(this.value=16),e.value=this.value,e.value<16?e.value=16:e.value>256&&(e.value=256),this.value=e.value),document.getElementById("mk-password-btn").click()}function POM_generatePassword(){let e=document.getElementById("mk-password-strength");e.style.background="inherit",e.style.width="0",e.style.transition="none";let t=document.getElementById("mk-password-field");t.value="",t.classList.remove("mk-password-field-focus");let n=document.getElementById("mk-length-field");if(n&&n.value>=16&&n.value<=256){let s="";if(document.getElementById("mk-uppercase-select").checked&&(s+=POM_strUppercase),document.getElementById("mk-special-one-select").checked&&(s+=POM_strSpecialOne+POM_strSpecialOne),document.getElementById("mk-digits-select").checked&&(s+=POM_strDigits),document.getElementById("mk-lowercase-select").checked&&(s+=POM_strLowercase),document.getElementById("mk-digits-select").checked&&(s+=POM_strDigits),document.getElementById("mk-special-two-select").checked&&(s+=POM_strSpecialTwo+POM_strSpecialTwo),s.length>0){let a="",l="";for(let i=0;i7&&c++,a.length>15&&c++,a.length>31&&(c+=2),a.length>63&&(c+=4),c>8&&(c=8),c>6?e.style.background="#27ce60":c>5?e.style.background="#27ae60":c>3?e.style.background="#FFC300":e.style.background="#C0392B",e.style.width=12.5*c+"%",e.style.transition="width 0.3s ease-in"}}}function POM_copyPassword(){let e=document.getElementById("mk-password-field");if(e&&e.value.length>0){if(navigator&&navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(e.value).then(function(){e.classList.add("mk-password-field-focus")},function(e){alert("Could not copy text: "+e)});else{var t=document.createElement("textarea");t.value=e.value,t.setAttribute("readonly",""),t.style.position="absolute",t.style.top="-6969px",t.style.left="-6969px",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy")?e.classList.add("mk-password-field-focus"):alert("That did not work")}catch(n){alert("Could not copy text: "+n.message)}document.body.removeChild(t)}}}function POM_initialSetup(){if(navigator.language){let e=(POM_cfgLanguage=navigator.language).indexOf("-");e&&e>0&&(POM_cfgLanguage=POM_cfgLanguage.substring(0,e)),POM_cfgLanguage=POM_cfgLanguage.toLowerCase()}else POM_cfgLanguage="???";switch(POM_cfgLanguage){case"sv":case"se":POM_cfgTitle="Slumpm\xe4ssigt L\xf6senord",POM_cfgSlogan='Inga kakor, ingen sp\xe5rning.
Bara l\xf6senord.',POM_cfgGenPasswordHint="Generera l\xf6senord";break;case"de":POM_cfgTitle="Zufallsgenerator f\xfcr Passw\xf6rter",POM_cfgSlogan='Keine Cookies, keine Tracker.
Nur Passw\xf6rter.',POM_cfgGenPasswordHint="Passwort generieren";break;case"hu":POM_cfgTitle="V\xe9letlenszerű jelsz\xf3gener\xe1tor",POM_cfgSlogan='Cookie-k n\xe9lk\xfcl, nyomk\xf6vetők n\xe9lk\xfcl.
Csak jelszavak.',POM_cfgGenPasswordHint="Jelsz\xf3 gener\xe1l\xe1sa";break;case"nl":POM_cfgTitle="Willekeurig Wachtwoord Generator",POM_cfgSlogan='Geen cookies, geen trackers.
Uitsluitend wachtwoorden.',POM_cfgGenPasswordHint="Genereer wachtwoord";break;case"lb":POM_cfgTitle="Zoufallspasswuertgenerator",POM_cfgSlogan='Keng Cookien, keng Trackeren.
Nemme Passwierder.',POM_cfgGenPasswordHint="Passwuert genereieren";break;case"fr":POM_cfgTitle="G\xe9n\xe9rateur de mot de passe au hazard",POM_cfgSlogan='Pas de cookies, pas de traceurs.
Juste des mots de passe.',POM_cfgGenPasswordHint="G\xe9n\xe9rer mot de passe";break;case"fi":POM_cfgTitle="Salasanageneraattori",POM_cfgSlogan='Ei ev\xe4steit\xe4, ei seurantaa.
Vain salasanoja.',POM_cfgGenPasswordHint="Generoi salasana";break;case"sl":POM_cfgTitle="Generator Naključnih Gesel",POM_cfgSlogan='Brez piškotkov, nič sledilnikov.
Samo geslo.',POM_cfgGenPasswordHint="Generiraj geslo";break;default:POM_cfgTitle="Random Password Generator",POM_cfgSlogan='No cookies, no trackers.
Just passwords.',POM_cfgGenPasswordHint="Generate password"}document.getElementById("cfg-page-title").innerHTML=POM_cfgTitle,document.getElementById("cfg-page-slogan").innerHTML=POM_cfgSlogan,document.getElementById("cfg-page-lang").innerHTML="["+POM_cfgLanguage+"]",document.getElementById("mk-password-btn").title=POM_cfgGenPasswordHint,document.getElementById("mk-uppercase-select").checked=!0,document.getElementById("mk-lowercase-select").checked=!0,document.getElementById("mk-digits-select").checked=!0,document.getElementById("mk-special-one-select").checked=!0,document.getElementById("mk-special-two-select").checked=!1,document.getElementById("mk-password-field").value="";let t=document.getElementById("mk-password-len-slider");t&&(t.value=16,t.setAttribute("min",16),t.setAttribute("max",256),t.step=8),document.getElementById("mk-length-field").value=16,document.getElementById("gen-uppercase").innerText=POM_strUppercase,document.getElementById("gen-lowercase").innerText=POM_strLowercase,document.getElementById("gen-digits").innerText=POM_strDigits,document.getElementById("gen-special-one").innerText=POM_strSpecialOne,document.getElementById("gen-special-two").innerText=POM_strSpecialTwo,document.getElementById("gen-timestamp").innerText=Date.now(),document.getElementById("mk-password-len-slider").addEventListener("input",function(){let e=document.getElementById("mk-length-field");e&&(e.value=this.value,e.value<16?e.value=16:e.value>256&&(e.value=256),this.value=e.value)}),document.getElementById("mk-length-field").addEventListener("click",function(){this.select()}),document.getElementById("mk-length-field").addEventListener("blur",POM_validateNumInput),document.getElementById("mk-length-field").addEventListener("change",POM_validateNumInput),document.getElementById("mk-password-btn").addEventListener("click",POM_generatePassword),document.getElementById("mk-password-field").addEventListener("click",POM_copyPassword),document.getElementById("mk-password-btn").click(),document.getElementById("mk-uppercase-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-special-one-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-digits-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-lowercase-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-digits-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-special-two-select").addEventListener("click",POM_generatePassword),document.getElementById("mk-password-len-slider").addEventListener("change",POM_generatePassword)}"complete"!==document.readyState&&("loading"===document.readyState||document.documentElement.doScroll)?document.addEventListener("DOMContentLoaded",POM_initialSetup):POM_initialSetup(); \ No newline at end of file