1 line
6.3 KiB
JavaScript
1 line
6.3 KiB
JavaScript
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_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=new Set(e),e=[...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)}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 a="";if(document.getElementById("mk-uppercase-select").checked&&(a+=POM_strUppercase),document.getElementById("mk-special-one-select").checked&&(a+="-._#$@%!-._#$@%!"),document.getElementById("mk-digits-select").checked&&(a+=POM_strDigits),document.getElementById("mk-lowercase-select").checked&&(a+=POM_strLowercase),document.getElementById("mk-digits-select").checked&&(a+=POM_strDigits),document.getElementById("mk-special-two-select").checked&&(a+=POM_strSpecialTwo+POM_strSpecialTwo),a.length>0){let s="",l="";for(let e=0;e<n.value;e++){l=a[Math.floor(Math.random()*a.length)],s+=l}t.value=s;let d,c,o=0;d="["+POM_escapeRegExp(POM_strUppercase)+"]",c=new RegExp(d),c.test(s)&&o++,d="["+POM_escapeRegExp(POM_strLowercase)+"]",c=new RegExp(d),c.test(s)&&o++,d="["+POM_escapeRegExp(POM_strDigits)+"]",c=new RegExp(d),c.test(s)&&o++,d="["+POM_escapeRegExp("-._#$@%!")+"]",c=new RegExp(d),c.test(s)&&o++,d="["+POM_escapeRegExp(POM_strSpecialTwo)+"]",console.log("Using "+d+" to scan password"),c=new RegExp(d),c.test(s)&&o++,s.length>7&&o++,s.length>15&&o++,s.length>31&&(o+=2),s.length>63&&(o+=4),o>8&&(o=8),e.style.background=o>6?"#27ce60":o>5?"#27ae60":o>3?"#FFC300":"#C0392B",e.style.width=12.5*o+"%",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(e){alert("Could not copy text: "+e.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ässigt Lösenord",POM_cfgSlogan='Inga kakor, <span tyle="display:inline-block">ingen spårning.</span><br/>Bara lösenord.',POM_cfgGenPasswordHint="Generera lösenord";break;case"de":POM_cfgTitle="Zufallsgenerator für Passwörter",POM_cfgSlogan='Keine Cookies, <span style="display:inline-block">keine Tracker.</span><br/>Nur Passwörter.',POM_cfgGenPasswordHint="Passwort generieren";break;default:POM_cfgTitle="Random Password Generator",POM_cfgSlogan='No cookies, <span style="display:inline-block">no trackers.</span><br/>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=true,document.getElementById("mk-lowercase-select").checked=true,document.getElementById("mk-digits-select").checked=true,document.getElementById("mk-special-one-select").checked=true,document.getElementById("mk-special-two-select").checked=false,document.getElementById("mk-password-field").value="";let e=document.getElementById("mk-password-len-slider");e&&(e.value=16,e.setAttribute("min",16),e.setAttribute("max",256),e.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="-._#$@%!",document.getElementById("gen-special-two").innerText=POM_strSpecialTwo,document.getElementById("gen-timestamp").innerText=Date.now(),document.getElementById("mk-password-len-slider").addEventListener("oninput",(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()}"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?POM_initialSetup():document.addEventListener("DOMContentLoaded",POM_initialSetup); |