X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=js%2Finserts.js;h=ca55cfa110e8e592c102e939abbd138d6f384005;hb=c77108fc089088aa25aa59d7571762ce12d8066b;hp=e15da1efe2ee42485a6dab5d67ce153f9501c6cd;hpb=7eb0da506fb25d46c9c63132dc42f5f5b31222c0;p=fa-stable.git diff --git a/js/inserts.js b/js/inserts.js index e15da1ef..ca55cfa1 100644 --- a/js/inserts.js +++ b/js/inserts.js @@ -207,6 +207,67 @@ function passBack(value) { close(); } +/* + Normalize date format using previous input value to guess missing date elements. + Helps fast date input field change with only single or double numbers (for day or day-and-month fragments) +*/ +function fix_date(date, last) +{ + var dat = last.split(user.datesep); + var cur = date.split(user.datesep); + var day, month, year; + +// TODO: user.date as default? +// TODO: user.datesys + if (date == "" || date == last) // should we return an empty date or should we return last? + return date; + if (user.datefmt == 0 || user.datefmt == 3) // set defaults + { + day = dat[1]; month = dat[0]; year = dat[2]; + } else if (user.datefmt == 1 || user.datefmt == 4){ + day = dat[0]; month = dat[1]; year = dat[2]; + } else { + day = dat[2]; month = dat[1]; year = dat[0]; + } + if (cur[1] != undefined && cur[1] != "") // day or month entered, could be string 3 + { + if (user.datefmt == 0 || user.datefmt == 3 || ((user.datefmt == 2 || user.datefmt == 5) && (cur[2] == undefined || cur[2] == ""))) + day = cur[1]; + else + month = cur[1]; + } + if (cur[0] != undefined && cur[0] != "") // day or month entered. could be string 3 + { + if (cur[1] == undefined || cur[1] == "") + day = cur[0]; + else if (user.datefmt == 0 || user.datefmt == 3 || ((user.datefmt == 2 || user.datefmt == 5) && (cur[2] == undefined || cur[2] == ""))) + month = cur[0]; + else if (user.datefmt == 2 || user.datefmt == 5) + year = cur[0]; + else + day = cur[0]; + } + if (cur[2] != undefined && cur[2] != "") // year, + { + if (user.datefmt == 2 || user.datefmt == 5) + day = cur[2]; + else + year = cur[2]; + } + if (user.datefmt<3) { + if (day<10) day = '0'+parseInt(day, 10); + if (month<10) month = '0'+parseInt(month, 10); + } + if (year<100) year = year<60 ? (2000+parseInt(year,10)) : (1900+parseInt(year,10)); + +// console.info(day,month,year) + if (user.datefmt == 0 || user.datefmt==3) + return month+user.datesep+day+user.datesep+year; + if (user.datefmt == 1 || user.datefmt==4) + return day+user.datesep+month+user.datesep+year; + return year+user.datesep+month+user.datesep+day; +} + /* Behaviour definitions */ @@ -299,6 +360,20 @@ var inserts = { } } }, + '.date': + function(e) { + e.setAttribute('_last_val', e.value); + e.setAttribute('autocomplete', 'off'); + e.onblur = function() { + var val = this.getAttribute('_last_val'); + if (val != this.value) { + this.value = fix_date(this.value, val); + this.setAttribute('_last_val', this.value); + if (e.className.match(/\bactive\b/)) + JsHttpRequest.request('_'+this.name+'_changed', this.form); + } + } + }, 'button[aspect*selector], button[aspect*abort], input[aspect*selector]': function(e) { e.onclick = function() { passBack(this.getAttribute('rel')); @@ -508,7 +583,7 @@ function setHotKeys() { ev.returnValue = false; return false; } - if (editors && editors[key]) { + if (editors!=='undefined' && editors[key]) { callEditor(key); return stopEv(ev); // prevent default binding }