ovld
Version:
ovld unobtrusive client validation for asp.net core mvc
3 lines (2 loc) • 2.99 kB
JavaScript
!function(n){const t='[name]:not([type="checkbox"])',e=["change","input"],r={req:function({v:n}){return!n||!n.trim()},minlen:function(n){return function({v:t}){return t&&t.length<n}},maxlen:function(n){return function({v:t}){return t&&t.length>n}},len:function({min:n,max:t}){return function(e){return r.minlen(n)(e)||r.maxlen(t)(e)}}};function o(n,t){return n.querySelectorAll(t)}function i(n,t){return n.getAttribute(t)}function c(n){return n.value}function u(n,t){n.classList.add(t)}function a(n,t){n.classList.remove(t)}function s(n,t){n.insertAdjacentHTML("beforeend",t)}function l(n){n&&(n.innerHTML="")}function f({opt:n,cont:e,event:r}){let i={};return o(e,t).forEach((function(t){const e=d(n,t,r);e&&Object.keys(e).length>0&&(i={...i,...e})})),i}function d(n,t,e){if(n.ignore&&n.ignore(t)||m.ignore(t))return;const r=i(t,"name");if(!r)return;const o={};n.tched&&(n.tched[r]=t),o[r]={input:t,rules:v({opt:n,name:r,event:e,input:t})};const c=n.related;return n.tched&&c&&c[r]&&c[r].forEach((function(t){const r=n.tched[t];r&&(o[t]={input:r,rules:v({opt:n,name:t,event:e,input:r})})})),o}function v({opt:n,name:t,event:e,input:r}){let o=[],i=(n.getRules?n.getRules():n.rules)[t];return i?(Array.isArray(i)||(i=[i]),i.forEach((function(n){var i=n.chk({v:c(r),event:e,input:r,name:t});if(i)return o.push(i.msg?i:n),!1})),o):o}function h({opt:n,res:t}){Object.entries(t).forEach((([t,{input:e,rules:r}])=>{const o=n.msgCont({input:e,name:t});o?(l(o),a(o,"field-validation-valid"),r&&r.length?o.matches("[data-valmsg-replace]")?(u(o,"field-validation-error"),o.innerHTML=r[0].msg):s(o,'<div class="field-validation-error">'+r[0].msg+"</div>"):o&&(a(o,"field-validation-error"),u(o,"field-validation-valid"))):r.length&&console.warn(`no message container for ${t}`)}))}function p(n,t,e,r){const o=window.jQuery;if(o){const i=t.join(" ");return o(n).on(i,r,e),[()=>o(n).off(i,r,e)]}let i=[],c=e;return r&&(c=function(n){n.target.matches(r)&&e.call(this,n)}),(n=n instanceof NodeList?[...n]:[n]).forEach((function(n){t.forEach((function(t){n.addEventListener(t,c),i.push((()=>n.removeEventListener(t,c)))}))})),i}const m={core:{find:o,attr:i,val:c,addClass:u,remClass:a,append:s,empty:l},ignore:function(n){},rules:r,validate:function(n){return f({opt:n,cont:n.cont})},bind:function(n){n.tched={};const r=n.cont||o(document,n.selector);let c=[];return c.push(...p(r,e,(function(t){const e=t.target,r=i(e,"type");if("checkbox"==r||"radio"==r)return;const o=d(n,e,t);o&&h({opt:n,res:o})}),t)),n.subev&&c.push(...p(r,[n.subev],(function(t,e){const r=f({opt:n,cont:t.target,event:t});try{h({opt:n,res:r})}catch(n){throw t.preventDefault(),n}if(!function(n){return!Object.values(n).some((({rules:n})=>n.length))}(r))return t.preventDefault(),e&&(e.cancel=1,e.target=this),t.stopImmediatePropagation(),t.target.dispatchEvent(new Event("ovldinvalidate",{cancelable:!0,bubbles:!0,isTrusted:!0})),!1}))),{destroy:function(){c.forEach((n=>n()))}}}};n.ovld=m}(window);
//# sourceMappingURL=ovld.min.js.map