From a0f2c4c22f92bdb5a2c1c1ea0c8960020f1f8b45 Mon Sep 17 00:00:00 2001 From: Divya Date: Tue, 9 Aug 2016 15:41:40 -0500 Subject: [PATCH] #109 Partial enhancement: Implemented masking date and time as user starts typing date and time for mm/dd/yyyy date format and 24 hour time format --- src/components/mdpDatePicker/mdpDatePicker.js | 49 +++++++++++++++++++ src/components/mdpTimePicker/mdpTimePicker.js | 46 +++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/src/components/mdpDatePicker/mdpDatePicker.js b/src/components/mdpDatePicker/mdpDatePicker.js index a4301812..2a476ab8 100644 --- a/src/components/mdpDatePicker/mdpDatePicker.js +++ b/src/components/mdpDatePicker/mdpDatePicker.js @@ -461,6 +461,55 @@ module.directive("mdpDatePicker", ["$mdpDatePicker", "$timeout", function($mdpDa scope.$on("$destroy", function() { inputElement.off("reset input blur", onInputElementEvents); }); + + if(scope.dateFormat == "MM/DD/YYYY") { + inputElement.on("keypress", formatDateAsTyped); + } + + function formatDateAsTyped(event) { + var localInputElement = this; + var inputDate = localInputElement.value; + var unicode = event.keyCode ? event.keyCode : event.charCode; + + //Allow BackSpace, Tab, F5, Del, left arrow, right arrow in firefox. IE, chrome, safari supports these keys + if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 116 || event.keyCode == 46 || (event.keyCode == 37 && !event.charCode) || event.keyCode == 39) { + return true; + } + + if (isNumber(unicode) && inputDate.length < 10) { + //replaces 2 to 02, 3 to 03.. for month field + inputDate = inputDate.replace(/^([2-9])/, "0$1"); + //restrict typing 13, 14, 15, 16, 17, 18, 19 for month field + if(inputDate == "1" && (unicode >= 51 && unicode <= 57)) { + return false; + } + //replaces 4 to 04, 5 to 05.. for date field + inputDate = inputDate.replace(/^([0-9])([0-9])(\/)([4-9])/, "$1$2$30$4"); + //restrict typing 2,3,4,5,6,7,8,9 in date field second position + if(inputDate.length == 4 && inputDate.charAt(3) == '3' && (unicode >= 50 && unicode <= 57)){ + return false; + } + if (inputDate.length == 2 || inputDate.length == 5) { + inputDate = inputDate + "/"; + } + localInputElement.value = inputDate; + return true; + } + else { + return false; + } + } + + function isNumber(unicode) { + var char = String.fromCharCode(unicode); + + if ((("0123456789").indexOf(char) > -1)) { + return true; + } + else { + return false; + } + } } } }; diff --git a/src/components/mdpTimePicker/mdpTimePicker.js b/src/components/mdpTimePicker/mdpTimePicker.js index 249ea008..3fd7c5c8 100644 --- a/src/components/mdpTimePicker/mdpTimePicker.js +++ b/src/components/mdpTimePicker/mdpTimePicker.js @@ -361,6 +361,52 @@ module.directive("mdpTimePicker", ["$mdpTimePicker", "$timeout", function($mdpTi scope.$on("$destroy", function() { inputElement.off("reset input blur", onInputElementEvents); }) + + if(scope.timeFormat == "HH:mm") { + inputElement.on("keypress", format24HourTimeAsTyped); + } + + + function format24HourTimeAsTyped(event) { + var localInputElement = this; + var p = localInputElement.value; + var unicode = event.keyCode ? event.keyCode : event.charCode; + + //Allow BackSpace, Tab, F5, Del, left arrow, right arrow in firefox. IE, chrome, safari supports these keys + if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 116 || event.keyCode == 46 || (event.keyCode == 37 && !event.charCode) || event.keyCode == 39) { + return true; + } + + if (isNumber(unicode) && p.length < 5 ){ + //replaces 3 to 03, 4 to 04.. + p = p.replace(/^([3-9])/, "0$1"); + //restrict typing 24, 25, 26, 27, 28, 29 in hours + if(p == "2" && (unicode >= 52 && unicode <= 57)) { + return false; + } + if (p.length == 2) { + p = p + ":"; + } + //restrict typing 6, 7, 8, 9 in minutes first position + if(p.length == 3 && (unicode >= 54 && unicode <= 57)){ + return false; + } + localInputElement.value=p; + return true; + } else { + return false; + } + } + + function isNumber(unicode) { + var char = String.fromCharCode(unicode); + + if ((("0123456789").indexOf(char) > -1)) { + return true; + } else { + return false; + } + } } }; }]);