Browse Source

datetime alias: autofill year with currentyear #2266

Robin Herbots 6 years ago
parent
commit
12e22e80bc

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "5.0.4-beta.3",
+  "version": "5.0.4-beta.7",
   "main": [
 	  "./index.js",
     "./css/inputmask.css"

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
   "name": "robinherbots/inputmask",
   "description": "Inputmask is a javascript library which creates an input mask.  Inputmask can run against vanilla javascript, jQuery and jqlite.",
-  "version": "5.0.4-beta.3",
+  "version": "5.0.4-beta.7",
   "type": "library",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "homepage": "http://robinherbots.github.io/Inputmask",

+ 25 - 13
dist/inputmask.js

@@ -3,7 +3,7 @@
  * https://github.com/RobinHerbots/Inputmask
  * Copyright (c) 2010 - 2020 Robin Herbots
  * Licensed under the MIT license
- * Version: 5.0.4-beta.3
+ * Version: 5.0.4-beta.7
  */
 !function webpackUniversalModuleDefinition(root, factory) {
     if ("object" == typeof exports && "object" == typeof module) module.exports = factory(); else if ("function" == typeof define && define.amd) define([], factory); else {
@@ -41,7 +41,8 @@
         }
         function importAttributeOptions(npt, opts, userOptions, dataAttribute) {
             function importOption(option, optionData) {
-                optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + option), 
+                var attrOption = "" === dataAttribute ? option : dataAttribute + "-" + option;
+                optionData = void 0 !== optionData ? optionData : npt.getAttribute(attrOption), 
                 null !== optionData && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)), 
                 userOptions[option] = optionData);
             }
@@ -67,7 +68,7 @@
             opts.isRTL = !0), Object.keys(userOptions).length;
         }
         Inputmask.prototype = {
-            dataAttribute: "data-inputmask-",
+            dataAttribute: "data-inputmask",
             defaults: {
                 _maxTestPos: 500,
                 placeholder: "_",
@@ -2063,6 +2064,20 @@
             }
             return opts.tokenizer;
         }
+        function prefillYear(dateParts, currentResult, opts) {
+            if (dateParts.year !== dateParts.rawyear) {
+                var currentYear = new Date().getFullYear().toString(), enteredPart = dateParts.rawyear.replace(/[^0-9]/g, ""), currentYearPart = currentYear.slice(0, enteredPart.length), currentYearNextPart = currentYear.slice(enteredPart.length);
+                2 === enteredPart.length && enteredPart === currentYearPart && (!opts.max || opts.max.year >= currentYear) && (dateParts.date.setFullYear(currentYear), 
+                dateParts.year = currentYear, currentResult.insert = [ {
+                    pos: currentResult.pos + 1,
+                    c: currentYearNextPart[0]
+                }, {
+                    pos: currentResult.pos + 2,
+                    c: currentYearNextPart[1]
+                } ]);
+            }
+            return currentResult;
+        }
         function isValidDate(dateParts, currentResult) {
             return (!isFinite(dateParts.rawday) || "29" == dateParts.day && !isFinite(dateParts.rawyear) || new Date(dateParts.date.getFullYear(), isFinite(dateParts.rawmonth) ? dateParts.month : dateParts.date.getMonth() + 1, 0).getDate() >= dateParts.day) && currentResult;
         }
@@ -2105,23 +2120,19 @@
             var dateObj = {
                 date: new Date(1, 0, 1)
             }, targetProp, mask = maskString, match, dateOperation;
-            function extendProperty(value) {
-                var correctedValue = value.replace(/[^0-9]/g, "0");
-                return correctedValue;
-            }
             function setValue(dateObj, value, opts) {
-                dateObj[targetProp] = extendProperty(value), dateObj["raw" + targetProp] = value, 
+                dateObj[targetProp] = value.replace(/[^0-9]/g, "0"), dateObj["raw" + targetProp] = value, 
                 void 0 !== dateOperation && dateOperation.call(dateObj.date, "month" == targetProp ? parseInt(dateObj[targetProp]) - 1 : dateObj[targetProp]);
             }
             if ("string" == typeof mask) {
                 for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(format); ) {
                     var value = mask.slice(0, match[0].length);
-                    formatCode.hasOwnProperty(match[0]) && (targetProp = formatCode[match[0]][2], dateOperation = formatCode[match[0]][1], 
-                    setValue(dateObj, value, opts)), mask = mask.slice(value.length);
+                    Object.prototype.hasOwnProperty.call(formatCode, match[0]) && (targetProp = formatCode[match[0]][2], 
+                    dateOperation = formatCode[match[0]][1], setValue(dateObj, value, opts)), mask = mask.slice(value.length);
                 }
                 return dateObj;
             }
-            if (mask && "object" === _typeof(mask) && mask.hasOwnProperty("date")) return mask;
+            if (mask && "object" === _typeof(mask) && Object.prototype.hasOwnProperty.call(mask, "date")) return mask;
         }
         function importDate(dateObj, opts) {
             var match, date = "";
@@ -2207,8 +2218,9 @@
                         !1 === new RegExp(validator).test(part.join("")) && 2 === tokenMatch.targetMatch[0].length && maskset.validPositions[tokenMatch.targetMatchIndex] && maskset.validPositions[tokenMatch.targetMatchIndex + 1] && (maskset.validPositions[tokenMatch.targetMatchIndex + 1].input = "0");
                     }
                     var result = currentResult, dateParts = analyseMask(buffer.join(""), opts.inputFormat, opts);
-                    return result && dateParts.date.getTime() == dateParts.date.getTime() && (result = isValidDate(dateParts, result), 
-                    result = result && isDateInRange(dateParts, opts)), pos && result && currentResult.pos !== pos ? {
+                    return result && dateParts.date.getTime() == dateParts.date.getTime() && (result = prefillYear(dateParts, result, opts), 
+                    result = isValidDate(dateParts, result), result = result && isDateInRange(dateParts, opts)), 
+                    pos && result && currentResult.pos !== pos ? {
                         buffer: parse(opts.inputFormat, dateParts, opts).split(""),
                         refreshFromBuffer: {
                             start: pos,

File diff suppressed because it is too large
+ 2 - 2
dist/inputmask.min.js


+ 25 - 13
dist/jquery.inputmask.js

@@ -3,7 +3,7 @@
  * https://github.com/RobinHerbots/Inputmask
  * Copyright (c) 2010 - 2020 Robin Herbots
  * Licensed under the MIT license
- * Version: 5.0.4-beta.3
+ * Version: 5.0.4-beta.7
  */
 !function webpackUniversalModuleDefinition(root, factory) {
     if ("object" == typeof exports && "object" == typeof module) module.exports = factory(require("jquery")); else if ("function" == typeof define && define.amd) define([ "jquery" ], factory); else {
@@ -41,7 +41,8 @@
         }
         function importAttributeOptions(npt, opts, userOptions, dataAttribute) {
             function importOption(option, optionData) {
-                optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + option), 
+                var attrOption = "" === dataAttribute ? option : dataAttribute + "-" + option;
+                optionData = void 0 !== optionData ? optionData : npt.getAttribute(attrOption), 
                 null !== optionData && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)), 
                 userOptions[option] = optionData);
             }
@@ -67,7 +68,7 @@
             opts.isRTL = !0), Object.keys(userOptions).length;
         }
         Inputmask.prototype = {
-            dataAttribute: "data-inputmask-",
+            dataAttribute: "data-inputmask",
             defaults: {
                 _maxTestPos: 500,
                 placeholder: "_",
@@ -1938,6 +1939,20 @@
             }
             return opts.tokenizer;
         }
+        function prefillYear(dateParts, currentResult, opts) {
+            if (dateParts.year !== dateParts.rawyear) {
+                var currentYear = new Date().getFullYear().toString(), enteredPart = dateParts.rawyear.replace(/[^0-9]/g, ""), currentYearPart = currentYear.slice(0, enteredPart.length), currentYearNextPart = currentYear.slice(enteredPart.length);
+                2 === enteredPart.length && enteredPart === currentYearPart && (!opts.max || opts.max.year >= currentYear) && (dateParts.date.setFullYear(currentYear), 
+                dateParts.year = currentYear, currentResult.insert = [ {
+                    pos: currentResult.pos + 1,
+                    c: currentYearNextPart[0]
+                }, {
+                    pos: currentResult.pos + 2,
+                    c: currentYearNextPart[1]
+                } ]);
+            }
+            return currentResult;
+        }
         function isValidDate(dateParts, currentResult) {
             return (!isFinite(dateParts.rawday) || "29" == dateParts.day && !isFinite(dateParts.rawyear) || new Date(dateParts.date.getFullYear(), isFinite(dateParts.rawmonth) ? dateParts.month : dateParts.date.getMonth() + 1, 0).getDate() >= dateParts.day) && currentResult;
         }
@@ -1980,23 +1995,19 @@
             var dateObj = {
                 date: new Date(1, 0, 1)
             }, targetProp, mask = maskString, match, dateOperation;
-            function extendProperty(value) {
-                var correctedValue = value.replace(/[^0-9]/g, "0");
-                return correctedValue;
-            }
             function setValue(dateObj, value, opts) {
-                dateObj[targetProp] = extendProperty(value), dateObj["raw" + targetProp] = value, 
+                dateObj[targetProp] = value.replace(/[^0-9]/g, "0"), dateObj["raw" + targetProp] = value, 
                 void 0 !== dateOperation && dateOperation.call(dateObj.date, "month" == targetProp ? parseInt(dateObj[targetProp]) - 1 : dateObj[targetProp]);
             }
             if ("string" == typeof mask) {
                 for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(format); ) {
                     var value = mask.slice(0, match[0].length);
-                    formatCode.hasOwnProperty(match[0]) && (targetProp = formatCode[match[0]][2], dateOperation = formatCode[match[0]][1], 
-                    setValue(dateObj, value, opts)), mask = mask.slice(value.length);
+                    Object.prototype.hasOwnProperty.call(formatCode, match[0]) && (targetProp = formatCode[match[0]][2], 
+                    dateOperation = formatCode[match[0]][1], setValue(dateObj, value, opts)), mask = mask.slice(value.length);
                 }
                 return dateObj;
             }
-            if (mask && "object" === _typeof(mask) && mask.hasOwnProperty("date")) return mask;
+            if (mask && "object" === _typeof(mask) && Object.prototype.hasOwnProperty.call(mask, "date")) return mask;
         }
         function importDate(dateObj, opts) {
             var match, date = "";
@@ -2082,8 +2093,9 @@
                         !1 === new RegExp(validator).test(part.join("")) && 2 === tokenMatch.targetMatch[0].length && maskset.validPositions[tokenMatch.targetMatchIndex] && maskset.validPositions[tokenMatch.targetMatchIndex + 1] && (maskset.validPositions[tokenMatch.targetMatchIndex + 1].input = "0");
                     }
                     var result = currentResult, dateParts = analyseMask(buffer.join(""), opts.inputFormat, opts);
-                    return result && dateParts.date.getTime() == dateParts.date.getTime() && (result = isValidDate(dateParts, result), 
-                    result = result && isDateInRange(dateParts, opts)), pos && result && currentResult.pos !== pos ? {
+                    return result && dateParts.date.getTime() == dateParts.date.getTime() && (result = prefillYear(dateParts, result, opts), 
+                    result = isValidDate(dateParts, result), result = result && isDateInRange(dateParts, opts)), 
+                    pos && result && currentResult.pos !== pos ? {
                         buffer: parse(opts.inputFormat, dateParts, opts).split(""),
                         refreshFromBuffer: {
                             start: pos,

File diff suppressed because it is too large
+ 2 - 2
dist/jquery.inputmask.min.js


+ 30 - 19
lib/extensions/inputmask.date.extensions.js

@@ -112,6 +112,32 @@ function getTokenizer(opts) {
 	return opts.tokenizer;
 }
 
+function prefillYear(dateParts, currentResult, opts) {
+
+	if (dateParts.year !== dateParts.rawyear) {
+		var currentYear = new Date().getFullYear().toString(),
+			enteredPart = dateParts.rawyear.replace(/[^0-9]/g, ""),
+			currentYearPart = currentYear.slice(0, enteredPart.length),
+			currentYearNextPart = currentYear.slice(enteredPart.length);
+		if (enteredPart.length === 2 && enteredPart === currentYearPart && (!opts.max || opts.max.year >= currentYear)) {
+			//update dateParts
+			dateParts.date.setFullYear(currentYear);
+			dateParts.year = currentYear;
+			//update result
+			currentResult.insert = [{
+				pos: currentResult.pos + 1,
+				c: currentYearNextPart[0]
+			}, {
+				pos: currentResult.pos + 2,
+				c: currentYearNextPart[1]
+			}];
+		}
+
+	}
+
+	return currentResult;
+}
+
 function isValidDate(dateParts, currentResult) {
 	return !isFinite(dateParts.rawday)
 	|| (dateParts.day == "29" && !isFinite(dateParts.rawyear))
@@ -192,24 +218,8 @@ function pad(val, len) {
 function analyseMask(maskString, format, opts) {
 	var dateObj = {"date": new Date(1, 0, 1)}, targetProp, mask = maskString, match, dateOperation;
 
-	function extendProperty(value) {
-		var correctedValue = value.replace(/[^0-9]/g, "0");
-		// if (correctedValue != value) { //only do correction on incomplete values
-		//     //determine best validation match
-		//     var enteredPart = value.replace(/[^0-9]/g, ""),
-		//         enteredPartIndex = value.indexOf(enteredPart),
-		//         minPart = (opts.min && opts.min[targetProp] || value).slice(enteredPartIndex, enteredPartIndex + enteredPart.length),
-		//         maxPart = (opts.max && opts.max[targetProp] || value).slice(enteredPartIndex, enteredPartIndex + enteredPart.length),
-		//         correctedPart = enteredPart < minPart ? minPart : (enteredPart > maxPart ? maxPart : correctedValue.slice(enteredPartIndex, enteredPartIndex + enteredPart.length));
-		//     correctedValue = correctedValue.split("");
-		//     correctedValue.splice(enteredPartIndex, 1, correctedPart);
-		//     correctedValue = correctedValue.join("");
-		// }
-		return correctedValue;
-	}
-
 	function setValue(dateObj, value, opts) {
-		dateObj[targetProp] = extendProperty(value);
+		dateObj[targetProp] = value.replace(/[^0-9]/g, "0");
 		dateObj["raw" + targetProp] = value;
 
 		if (dateOperation !== undefined) {
@@ -221,7 +231,7 @@ function analyseMask(maskString, format, opts) {
 		getTokenizer(opts).lastIndex = 0;
 		while ((match = getTokenizer(opts).exec(format))) {
 			var value = mask.slice(0, match[0].length);
-			if (formatCode.hasOwnProperty(match[0])) {
+			if (Object.prototype.hasOwnProperty.call(formatCode, match[0])) {
 				// targetValidator = formatCode[match[0]][0];
 				targetProp = formatCode[match[0]][2];
 				dateOperation = formatCode[match[0]][1];
@@ -231,7 +241,7 @@ function analyseMask(maskString, format, opts) {
 		}
 
 		return dateObj;
-	} else if (mask && typeof mask === "object" && mask.hasOwnProperty("date")) {
+	} else if (mask && typeof mask === "object" && Object.prototype.hasOwnProperty.call(mask, "date")) {
 		return mask;
 	}
 	return undefined;
@@ -368,6 +378,7 @@ Inputmask.extendAliases({
 
 			var result = currentResult, dateParts = analyseMask(buffer.join(""), opts.inputFormat, opts);
 			if (result && dateParts.date.getTime() === dateParts.date.getTime()) { //check for a valid date ~ an invalid date returns NaN which isn't equal
+				result = prefillYear(dateParts, result, opts);
 				result = isValidDate(dateParts, result);
 				result = result && isDateInRange(dateParts, opts);
 			}

+ 3 - 2
lib/inputmask.js

@@ -50,7 +50,7 @@ function Inputmask(alias, options, internal) {
 }
 
 Inputmask.prototype = {
-	dataAttribute: "data-inputmask-", //data attribute prefix used for attribute binding
+	dataAttribute: "data-inputmask", //data attribute prefix used for attribute binding
 	//options default
 	defaults: {
 		_maxTestPos: 500,
@@ -248,7 +248,8 @@ function resolveAlias(aliasStr, options, opts) {
 
 function importAttributeOptions(npt, opts, userOptions, dataAttribute) {
 	function importOption(option, optionData) {
-		optionData = optionData !== undefined ? optionData : npt.getAttribute(dataAttribute + option);
+		const attrOption = dataAttribute === "" ? option : dataAttribute + "-" + option;
+		optionData = optionData !== undefined ? optionData : npt.getAttribute(attrOption);
 		if (optionData !== null) {
 			if (typeof optionData === "string") {
 				if (option.indexOf("on") === 0) {

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "5.0.4-beta.3",
+  "version": "5.0.4-beta.7",
   "description": "Inputmask is a javascript library which creates an input mask.  Inputmask can run against vanilla javascript, jQuery and jqlite.",
   "main": "index.js",
   "files": [