-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdatable.min.js
More file actions
4 lines (3 loc) · 2.13 KB
/
datable.min.js
File metadata and controls
4 lines (3 loc) · 2.13 KB
1
2
3
4
// datable.js by invot
// version 0.5.0
!function(e){e.datable=function(t){function a(t){if(e.isArray(t)){let e=new Date;return day=parseInt(e.getDate())+parseInt(t[2]),month=parseInt(e.getMonth()+1)+parseInt(t[1]),year=parseInt(e.getFullYear())+parseInt(t[0]),new Date(year,month,day)}return new Date(t)}let n=function(){e("input[type=datable]").each(function(){let t=e(this),n=t.data("datable")?t.data("datable"):"mmddyyyy",l=t.data("datable-era2"),r=t.data("datable-era"),o=n.match(/.{2}/g),d=[],i=t.data("datable-divider"),s=i||" / ",y=r?a(r):null,u=l?a(l):new Date;e.each(o,function(t,a){-1===e.inArray(a,d)?d.push(a):(d.pop(),d.push(a+a))});let h=d.join(s).toUpperCase();t.attr("maxlength",h.length),t.attr("placeholder",h).val(),t.bind("keydown",function(a){if((a.shiftKey||a.keyCode<48||a.keyCode>57)&&(a.keyCode<96||a.keyCode>105)&&-1===e.inArray(a.keyCode,[46,8,9,27,13,37,39])&&a.preventDefault(),8==a.keyCode)-1!==t.val().indexOf(s,t.val().length-s.length)&&(t.val(t.val().replace(new RegExp(s+"$"),"")),a.preventDefault());else if(a.keyCode>36&&a.keyCode<41);else{let a=this.selectionStart,n=(t.val().length,function(e,t){let a=[],n=-1;for(;(n=t.indexOf(e,n+1))>=0;)a.push(n);return a}(s,h));t.val().substring(a,parseInt(a)+s.length)!=s||e.inArray(a,n)?-1!==e.inArray(a,n)&&t.val().length<h.length&&t.val(t.val()+s):this.selectionStart=t.val().length}}),t.on("blur",function(){let e=t.val().split(s),a=function(e,t){for(var a={},n=0;n<e.length;n++)a[e[n]]=t[n];return a}(d,e),n=0;if(a.yy&&(a.yyyy=2e3+parseInt(a.yy)),a.dd||(a.dd=1),a.mm||(a.mm=1),function(e,t,a){let n=new Date(e,t-1,a);return n.getFullYear()==e&&n.getMonth()==t-1&&n.getDate()==a}(a.yyyy,a.mm,a.dd)){let e=new Date(a.yyyy,a.mm,a.dd);y&&(e<y&&e<u||e>y&&e>u)&&n++}else n++;0!==t.val().length&&n?t.addClass("error").closest(".control-group").addClass("has-error"):t.removeClass("error").closest(".control-group").removeClass("has-error")})})};switch(t){case"deinit":e("input[type=datable]").each(function(){e(this).attr("placeholder","").attr("maxlength","").unbind("keydown")});break;case"clearAll":e("input[type=datable]").each(function(){e(this).val("")});break;case"init":default:n()}}}(jQuery);