-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbalzac.min.js
2 lines (2 loc) · 12.2 KB
/
balzac.min.js
1
2
/*! balzac.js v0.1.4 | MIT License | github.com/visicode/Balzac.js */
(_=>{"use strict";function t(e){switch(e.target.case){case"none":e.target.style.textTransform="initial";break;case"lower":e.target.style.textTransform="lowercase",e.target.validity.valid&&(e.target.value=e.target.value.toLowerCase().trimLines());break;case"upper":e.target.style.textTransform="uppercase",e.target.validity.valid&&(e.target.value=e.target.value.toUpperCase().trimLines());break;case"title":e.target.style.textTransform="none",e.target.validity.valid&&(e.target.value=e.target.value.toTitleCase());break;case"sentence":e.target.style.textTransform="none",e.target.validity.valid&&(e.target.value=e.target.value.toSentenceCase())}}function r(e){e.validity&&(t({target:e}),e.addEventListener("change",t))}Number.prototype.isBetween||Object.defineProperties(Number.prototype,{isBetween:{value:function(e,t){return this>=e&&this<=t}}}),Number.prototype.isBetweenExclusive||Object.defineProperties(Number.prototype,{isBetweenExclusive:{value:function(e,t){return this>e&&this<t}}}),Math.roundTo||Object.defineProperties(Math,{roundTo:{value:(e,t)=>+(Math.round(e+"e+"+t)+"e-"+t)}}),String.prototype.isUpperCase||Object.defineProperties(String.prototype,{isUpperCase:{value:function(){return![...this].some((e=>e!==e.toUpperCase()))}}}),String.prototype.isLowerCase||Object.defineProperties(String.prototype,{isLowerCase:{value:function(){return![...this].some((e=>e!==e.toLowerCase()))}}}),String.prototype.toTitleCase||Object.defineProperties(String.prototype,{toTitleCase:{value:function(){return(this.length>3&&this.isUpperCase()?this.toLowerCase():this).replace(/\w\S*/g,(e=>e.charAt(0).toUpperCase()+e.substr(1))).replaceAll(" "," ").trimLines()}}}),String.prototype.toSentenceCase||Object.defineProperties(String.prototype,{toSentenceCase:{value:function(){return(this.length>3&&this.isUpperCase()?this.toLowerCase():this).replace(/(^\s*\w{1}|[.!?]\s+\w{1})/gm,(e=>e.toUpperCase())).replaceAll(" "," ").trimLines()}}}),String.prototype.trimLines||Object.defineProperties(String.prototype,{trimLines:{value:function(){return this.replace(/(^\s+|\s+$)/gm,"")}}}),String.prototype.truncate||Object.defineProperties(String.prototype,{truncate:{value:function(e){if(e>=1&&this.length>e){const t=this.substr(0,e),r=t.search(/\W+(?:.(?!\W))+$/g);return t.substr(0,r>0?r:e-1)+"…"}return this.valueOf()}}}),String.prototype.firstLines||Object.defineProperties(String.prototype,{firstLines:{value:function(e){return this.split(/\r?\n/g,e).join("\n")}}}),WebUtility.stripSpecialChars||Object.defineProperties(WebUtility,{stripSpecialChars:{value:(e,f)=>e.replace(/[^\w\d\s]/g,f||"")}}),WebUtility.toPlainText||Object.defineProperties(WebUtility,{toPlainText:{value:e=>(new DOMParser).parseFromString(e.replace(/\r?\n[ \t]*/g," ").replace(/<(audio|canvas|noscript|script|style|video)\b.*?<\/\1>/gi,"").replace(/<\/?(address|article|aside|blockquote|dd|div|dl|dt|fieldset|figcaption|figure|footer|form|h[1-6]|header|li|main|nav|ol|p|pre|section|table|tfoot|ul)\b[^>]*>/gi,"\n").replace(/<(br|hr)\s*\/?>/gi,"\n").replace(/<[a-z!/][^>]*>/gi,"").replace(/(^ +| +$)/gm,"").replaceAll(" "," "),"text/html").documentElement.textContent}}),WebUtility.nl2br||Object.defineProperties(WebUtility,{nl2br:{value:e=>e.replace(/\r?\n/g,"<br />")}}),WebUtility.nl2p||Object.defineProperties(WebUtility,{nl2p:{value:e=>"<p>"+e.replace(/\r?\n/g,"</p><p>")+"</p>"}}),Date.DURATION||Object.defineProperties(Date,{DURATION:{value:Object.freeze({SECONDE:1e3,MINUTE:6e4,HOUR:36e5,DAY:864e5})}}),Date.prototype.isValid||Object.defineProperties(Date.prototype,{isValid:{value:function(){return this instanceof Date&&!Number.isNaN(this)}}}),Date.prototype.isBetween||Object.defineProperties(Date.prototype,{isBetween:{value:function(e,t){return this>=e&&this<=t}}}),Date.prototype.isBetweenExclusive||Object.defineProperties(Date.prototype,{isBetweenExclusive:{value:function(e,t){return this>e&&this<t}}}),Date.prototype.addMilliseconds||Object.defineProperties(Date.prototype,{addMilliseconds:{value:function(e){const t=new Date(this);return t.setMilliseconds(t.getMilliseconds()+ +e),t}}}),Date.prototype.addSeconds||Object.defineProperties(Date.prototype,{addSeconds:{value:function(e){const t=new Date(this);return t.setSeconds(t.getSeconds()+ +e),t}}}),Date.prototype.addMinutes||Object.defineProperties(Date.prototype,{addMinutes:{value:function(e){const t=new Date(this);return t.setMinutes(t.getMinutes()+ +e),t}}}),Date.prototype.addHours||Object.defineProperties(Date.prototype,{addHours:{value:function(e){const t=new Date(this);return t.setHours(t.getHours()+ +e),t}}}),Date.prototype.addDays||Object.defineProperties(Date.prototype,{addDays:{value:function(e){const t=new Date(this);return t.setDate(t.getDate()+ +e),t}}}),Date.prototype.addMonths||Object.defineProperties(Date.prototype,{addMonths:{value:function(e){const t=new Date(this);return t.setMonth(t.getMonth()+ +e),t.getDate()!=this.getDate()&&t.setDate(0),t}}}),Date.prototype.addYears||Object.defineProperties(Date.prototype,{addYears:{value:function(e){const t=new Date(this);return t.setFullYear(t.getFullYear()+ +e),t.getDate()!=this.getDate()&&t.setDate(0),t}}}),RegExp.PATTERN||Object.defineProperties(RegExp,{PATTERN:{value:Object.freeze({EMAIL:/^[A-Za-z0-9]+([._%+\-][A-Za-z0-9]+)*@[A-Za-z0-9]+([.\-][A-Za-z0-9]+)*\.[A-Za-z]{2,9}$/,EMAILS:/^[A-Za-z0-9]+([._%+\-][A-Za-z0-9]+)*@[A-Za-z0-9]+([.\-][A-Za-z0-9]+)*\.[A-Za-z]{2,9}(, ?[A-Za-z0-9]+([._%+\-][A-Za-z0-9]+)*@[A-Za-z0-9]+([.\-][A-Za-z0-9]+)*\.[A-Za-z]{2,9})*$/,PHONE:/^(\+[1-9][0-9]{0,2} ?)?(\([0-9]{1,4}\) ?)?[0-9]+([ .\-]?[0-9]+){6,}( ?#[0-9]{1,5})?$/,PASSWORD:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).{8,}$/,PASSPORT:/^[Pp][A-Za-z<]{43}[A-Za-z0-9<]{9}[0-9][A-Za-z<]{3}[0-9]{7}[A-Za-z<][0-9]{7}[A-Za-z<]{14}[0-9<][0-9]$/,IBAN:/^[A-Za-z]{2}[0-9]{2}( ?[A-Za-z0-9]{4}){3,8}( ?[A-Za-z0-9]{1,3})?$/,POSTCODE:/^([0-9]{2,5}([ \-]?[A-Za-z0-9]{1,6})?|[A-Za-z]{1,3}[0-9 ]( ?[A-Za-z0-9]){1,6})$/})}}),navigator.isChrome||Object.defineProperties(navigator,{isChrome:{value:!!window.chrome&&/ Chrome| Chromium| crios/i.test(navigator.userAgent)}}),navigator.isEdge||Object.defineProperties(navigator,{isEdge:{value:/ Edge| Edg\//i.test(navigator.userAgent)}}),navigator.isFirefox||Object.defineProperties(navigator,{isFirefox:{value:/ Firefox| fxios/i.test(navigator.userAgent)}}),navigator.isOpera||Object.defineProperties(navigator,{isOpera:{value:/ Opera| OPR\//i.test(navigator.userAgent)}}),navigator.isSafari||Object.defineProperties(navigator,{isSafari:{value:/ Safari/i.test(navigator.userAgent)}}),document.getCookie||Object.defineProperties(document,{getCookie:{value:e=>{const t=document.cookie.match(/(^|;)\s*/.source+encodeURIComponent(e)+/\s*=\s*([^;]+)/.source);return t&&decodeURIComponent(t[2])}}}),document.setCookie||Object.defineProperties(document,{setCookie:{value:(e,t,r)=>{document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(t)+(r?";expires="+r.toUTCString():"")+";path=/"}}}),document.removeCookie||Object.defineProperties(document,{removeCookie:{value:e=>{document.setCookie(e,null,new Date(0))}}}),globalThis.File=globalThis.File||{},File.SIZE||Object.defineProperties(File,{SIZE:{value:Object.freeze({KILOBYTE:1024,MEGABYTE:1048576,GIGABYTE:1073741824,TERABYTE:1099511627776})}}),globalThis.WebUtility=globalThis.WebUtility||{},WebUtility.htmlEncode||Object.defineProperties(WebUtility,{htmlEncode:{value:e=>e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'").replaceAll("`","`"),enumerable:!0}}),WebUtility.htmlDecode||Object.defineProperties(WebUtility,{htmlDecode:{value:e=>e.replaceAll("`","`").replaceAll("'","'").replaceAll(""",'"').replaceAll(">",">").replaceAll("<","<").replaceAll("&","&"),enumerable:!0}}),WebUtility.PASSWORD_STRENGTH||Object.defineProperties(WebUtility,{PASSWORD_STRENGTH:{value:Object.freeze({EMPTY:0,SHORT:1,WEAK:2,MEDIUM:3,GOOD:4,STRONG:5})}}),WebUtility.getPasswordStrength||Object.defineProperties(WebUtility,{getPasswordStrength:{value:e=>{const t=e?e.length>=8?Math.max(/[a-z]/.test(e)+/[A-Z]/.test(e)+/\d/.test(e)+/\W/.test(e),WebUtility.PASSWORD_STRENGTH.WEAK):WebUtility.PASSWORD_STRENGTH.SHORT:WebUtility.PASSWORD_STRENGTH.EMPTY;return t<WebUtility.PASSWORD_STRENGTH.GOOD||e.length<12?t:WebUtility.PASSWORD_STRENGTH.STRONG}}}),globalThis.Fetch=globalThis.Fetch||{},Fetch.fetch||Object.defineProperties(Fetch,{fetch:{value:(e,t={})=>fetch(e,t).catch(console.error),enumerable:!0}}),Fetch.get||Object.defineProperties(Fetch,{get:{value:(e,t={})=>Fetch.fetch(e,{method:"GET",...t}),enumerable:!0}}),Fetch.post||Object.defineProperties(Fetch,{post:{value:(e,t,r={})=>Fetch.fetch(e,{method:"POST",body:t,...r}),enumerable:!0}}),Fetch.put||Object.defineProperties(Fetch,{put:{value:(e,t,r={})=>Fetch.fetch(e,{method:"PUT",body:t,...r}),enumerable:!0}}),Fetch.delete||Object.defineProperties(Fetch,{delete:{value:(e,t={})=>Fetch.fetch(e,{method:"DELETE",...t}),enumerable:!0}}),Fetch.fetchJson||Object.defineProperties(Fetch,{fetchJson:{value:(e,t={})=>fetch(e,{headers:{"Content-Type":"application/json",Accept:"application/json"},mode:"cors",credentials:"include",...t,body:t.body&&JSON.stringify(t.body)}).then((e=>e.ok&&e.json())).catch(console.error),enumerable:!0}}),Fetch.getJson||Object.defineProperties(Fetch,{getJson:{value:(e,t={})=>Fetch.fetchJson(e,{method:"GET",...t}),enumerable:!0}}),Fetch.postJson||Object.defineProperties(Fetch,{postJson:{value:(e,t,r={})=>Fetch.fetchJson(e,{method:"POST",body:t,...r}),enumerable:!0}}),Fetch.putJson||Object.defineProperties(Fetch,{putJson:{value:(e,t,r={})=>Fetch.fetchJson(e,{method:"PUT",body:t,...r}),enumerable:!0}}),Fetch.deleteJson||Object.defineProperties(Fetch,{deleteJson:{value:(e,t={})=>Fetch.fetchJson(e,{method:"DELETE",...t}),enumerable:!0}}),HTMLElement.prototype.case||Object.defineProperties(HTMLElement.prototype,{case:{get:function(){const e=(this.getAttribute("case")||"").toLowerCase();return["lower","upper","title","sentence"].includes(e)?e:"none"},set:function(e){this.setAttribute("case",e)},enumerable:!0}});const o="user-invalid";function n(){document.activeElement===document.body&&Array.from(document.forms).find((e=>{const t=e.getBoundingClientRect();if(t.top<window.innerHeight&&t.bottom>=0){const t=Array.from(e.elements).find((e=>e.tabIndex>-1&&!e.disabled&&!e.readOnly));if(t)return t.focus(),!0}return!1}))}function i(e){Array.from(e.elements).forEach((t=>{t.validity&&(t.addEventListener("change",(_=>{t.classList.toggle(o,!t.validity.valid),e.classList.toggle(o,!t.validity.valid||Array.from(e.elements).some((e=>e.classList.contains(o))))})),t.addEventListener("invalid",(_=>{t.classList.add(o),e.classList.add(o)})))})),e.addEventListener("reset",(_=>{Array.from(e.elements).forEach((e=>{e.validity&&(e.classList.remove(o),e instanceof HTMLOutputElement&&(e.textContent=""))})),e.classList.remove(o),n()})),window.addEventListener("scroll",n),n()}function a(e){return(e.getAttribute("type")||e.type).toLowerCase()}function s(e){switch(a(e)){case"email":e.case="lower",e.pattern||(e.pattern=e.multiple?RegExp.PATTERN.EMAILS.source:RegExp.PATTERN.EMAIL.source);break;case"tel":e.pattern||(e.pattern=RegExp.PATTERN.PHONE.source);break;case"password":e.pattern||(e.pattern=RegExp.PATTERN.PASSWORD.source);break;case"passport":e.case="upper",e.pattern||(e.pattern=RegExp.PATTERN.PASSPORT.source);break;case"iban":e.case="upper",e.pattern||(e.pattern=RegExp.PATTERN.IBAN.source);break;case"postcode":e.case="upper",e.pattern||(e.pattern=RegExp.PATTERN.POSTCODE.source);break;case"submit":case"reset":navigator.isFirefox&&(e.autocomplete="off")}}HTMLInputElement.prototype.getOutputs||Object.defineProperties(HTMLInputElement.prototype,{getOutputs:{value:function(){return document.querySelectorAll(`output[for="${this.name}"]`)}}});const c=()=>{Array.from(document.querySelectorAll("[case]")).forEach(r)},p=(e,t)=>{"case"===e&&r(t)},u=()=>{Array.from(document.forms).forEach(i)},l=e=>{e instanceof HTMLFormElement&&i(e)},d=()=>{Array.from(document.body.getElementsByTagName("input")).forEach(s)},f=e=>{e instanceof HTMLInputElement&&s(e)};function h(){d(),c(),u(),new MutationObserver((e=>{e.forEach((e=>{switch(e.type){case"childList":e.addedNodes.forEach((e=>{l(e),f(e)}));break;case"attributes":p(e.attributeName,e.target)}}))})).observe(document.body,{childList:!0,attributes:!0,subtree:!0})}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",h,!0):setTimeout(h,0)})()