diff --git a/CHANGE.md b/CHANGE.md index cda4437..7b79177 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -14,6 +14,7 @@ Change Log: `yii2-datecontrol` - `afterpaste.datecontrol`: will be triggered when a data is pasted in the date input on the client. - (enh #96, #102): Ignore timezone conversion for `DateControl::FORMAT_DATE`. - (bug #105): Set date control plugin data correctly within widget options. +- (bug #106): More correct validation for guessing date without ajax conversion. ## version 1.9.5 diff --git a/assets/js/datecontrol.js b/assets/js/datecontrol.js index 5c21332..dc11560 100644 --- a/assets/js/datecontrol.js +++ b/assets/js/datecontrol.js @@ -62,7 +62,7 @@ } else { if (isEmpty(vUrl)) { var vDispDate = vFormatter.parseDate($el.val(), vDispFormat); - if (vDispDate === false) { + if (vDispDate === false || vDispDate === null || String(vDispDate).length === 0) { vDispDate = vFormatter.guessDate($el.val(), vDispFormat); $el.val(vFormatter.formatDate(vDispDate, vDispFormat)); } diff --git a/assets/js/datecontrol.min.js b/assets/js/datecontrol.min.js index 2072f2c..936d2da 100644 --- a/assets/js/datecontrol.min.js +++ b/assets/js/datecontrol.min.js @@ -8,4 +8,4 @@ * * For more JQuery plugins visit http://plugins.krajee.com * For more Yii related demos visit http://demos.krajee.com - */!function(e){"use strict";var a=".datecontrol",t=function(a,t){return null===a||void 0===a||0===a.length||t&&""===e.trim(a)},n=function(a,t){var n=this;n.$element=e(a),n.init(t),n.listen()};n.prototype={constructor:n,init:function(a){var n=this,r=t(a.dateSettings)?{}:{dateSettings:a.dateSettings};if(e.each(a,function(e,a){n[e]=a}),n.$idSave=e("#"+a.idSave),n.dateFormatter=window.DateFormatter?new window.DateFormatter(r):{},t(n.dateFormatter))throw"No DateFormatter plugin found. Ensure you have 'php-date-formatter.js' loaded.";n.isChanged=!1},raise:function(t,n){var r=this,i=e.Event(t+a),s=r.$element;void 0!==n?s.trigger(i,n):s.trigger(i)},validate:function(){var a,n=this,r=n.$element,i=n.$idSave,s=n.url,o=n.type,u=n.dispFormat,l=n.saveFormat,d=n.dispTimezone,c=n.saveTimezone,v=n.asyncRequest,g=n.dateFormatter;if(!n.isChanged)if(n.isChanged=!0,t(r.val()))i.val("").trigger("change"),n.raise("changesuccess",[r.val(),i.val()]),n.isChanged=!1;else if(t(s)){var h=g.parseDate(r.val(),u);h===!1&&(h=g.guessDate(r.val(),u),r.val(g.formatDate(h,u))),i.val(g.formatDate(h,l)).trigger("change"),n.raise("changesuccess",[r.val(),i.val()]),n.isChanged=!1}else a="en"===n.language.substring(0,2)?[]:n.dateSettings,e.ajax({url:s,type:"post",dataType:"json",async:v,data:{displayDate:r.val(),type:o,dispFormat:u,saveFormat:l,dispTimezone:d,saveTimezone:c,settings:a},beforeSend:function(e){n.raise("beforechange",[r.val(),i.val(),e])},success:function(e,a,t){var s="changeerror";"success"===e.status&&(i.val(e.output).trigger("change"),s="changesuccess"),n.raise(s,[r.val(),i.val(),e,a,t])},complete:function(){n.isChanged=!1,n.raise("changecomplete",[r.val(),i.val()])},error:function(e,a,t){n.isChanged=!1,n.raise("changeajaxerror",[r.val(),i.val(),e,a,t])}})},listen:function(){var e=this,a=e.$element;a.on("change",function(){e.validate()}).on("paste",function(){setTimeout(function(){a.val(a.val()),e.validate(),e.raise("afterpaste")},100)})}},e.fn.datecontrol=function(a){var t=Array.apply(null,arguments);return t.shift(),this.each(function(){var r=e(this),i=r.data("datecontrol"),s="object"==typeof a&&a;i||(i=new n(this,e.extend({},e.fn.datecontrol.defaults,s,e(this).data())),r.data("datecontrol",i)),"string"==typeof a&&i[a].apply(i,t)})},e.fn.datecontrol.defaults={language:"en",dateSettings:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["AM","PM"]},dispTimezone:null,saveTimezone:null,asyncRequest:!0},e.fn.datecontrol.Constructor=n}(window.jQuery); \ No newline at end of file + */!function(e){"use strict";var a=".datecontrol",t=function(a,t){return null===a||void 0===a||0===a.length||t&&""===e.trim(a)},n=function(a,t){var n=this;n.$element=e(a),n.init(t),n.listen()};n.prototype={constructor:n,init:function(a){var n=this,r=t(a.dateSettings)?{}:{dateSettings:a.dateSettings};if(e.each(a,function(e,a){n[e]=a}),n.$idSave=e("#"+a.idSave),n.dateFormatter=window.DateFormatter?new window.DateFormatter(r):{},t(n.dateFormatter))throw"No DateFormatter plugin found. Ensure you have 'php-date-formatter.js' loaded.";n.isChanged=!1},raise:function(t,n){var r=this,i=e.Event(t+a),s=r.$element;void 0!==n?s.trigger(i,n):s.trigger(i)},validate:function(){var a,n=this,r=n.$element,i=n.$idSave,s=n.url,o=n.type,l=n.dispFormat,u=n.saveFormat,d=n.dispTimezone,c=n.saveTimezone,v=n.asyncRequest,g=n.dateFormatter;if(!n.isChanged)if(n.isChanged=!0,t(r.val()))i.val("").trigger("change"),n.raise("changesuccess",[r.val(),i.val()]),n.isChanged=!1;else if(t(s)){var h=g.parseDate(r.val(),l);h!==!1&&null!==h&&0!==String(h).length||(h=g.guessDate(r.val(),l),r.val(g.formatDate(h,l))),i.val(g.formatDate(h,u)).trigger("change"),n.raise("changesuccess",[r.val(),i.val()]),n.isChanged=!1}else a="en"===n.language.substring(0,2)?[]:n.dateSettings,e.ajax({url:s,type:"post",dataType:"json",async:v,data:{displayDate:r.val(),type:o,dispFormat:l,saveFormat:u,dispTimezone:d,saveTimezone:c,settings:a},beforeSend:function(e){n.raise("beforechange",[r.val(),i.val(),e])},success:function(e,a,t){var s="changeerror";"success"===e.status&&(i.val(e.output).trigger("change"),s="changesuccess"),n.raise(s,[r.val(),i.val(),e,a,t])},complete:function(){n.isChanged=!1,n.raise("changecomplete",[r.val(),i.val()])},error:function(e,a,t){n.isChanged=!1,n.raise("changeajaxerror",[r.val(),i.val(),e,a,t])}})},listen:function(){var e=this,a=e.$element;a.on("change",function(){e.validate()}).on("paste",function(){setTimeout(function(){a.val(a.val()),e.validate(),e.raise("afterpaste")},100)})}},e.fn.datecontrol=function(a){var t=Array.apply(null,arguments);return t.shift(),this.each(function(){var r=e(this),i=r.data("datecontrol"),s="object"==typeof a&&a;i||(i=new n(this,e.extend({},e.fn.datecontrol.defaults,s,e(this).data())),r.data("datecontrol",i)),"string"==typeof a&&i[a].apply(i,t)})},e.fn.datecontrol.defaults={language:"en",dateSettings:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["AM","PM"]},dispTimezone:null,saveTimezone:null,asyncRequest:!0},e.fn.datecontrol.Constructor=n}(window.jQuery); \ No newline at end of file