Small fix and rerun of inserts.js.
[fa-stable.git] / js / inserts.js
index e15da1efe2ee42485a6dab5d67ce153f9501c6cd..9ac008f0e9c5ee351e80896d33f90f1f9fe70e85 100644 (file)
@@ -207,6 +207,49 @@ 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[2] == undefined || cur[2] == "") // day or day-month
+       {
+               if (cur[0] != undefined && cur[0] != "" && cur[0].length < 3) // day entered
+                       day = cur[0];
+               if (cur[1] != undefined && cur[1] != "" && cur[1].length < 3) // month entered
+                       month = cur[1];
+       }               
+       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 +342,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 +565,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
                }