Browse Source

Merge branch 'dev'

Robin Herbots 13 years ago
parent
commit
1860aa0ab0
2 changed files with 219 additions and 233 deletions
  1. 201 217
      jquery.inputmask.extentions.js
  2. 18 16
      jquery.inputmask.js

+ 201 - 217
jquery.inputmask.extentions.js

@@ -3,12 +3,21 @@ Input Mask plugin extentions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+Version: 0.0.3b
 
 Optional extentions on the jquery.inputmask base
 */
 (function($) {
     //extra definitions
     $.extend($.inputmask.defaults.definitions, {
+        'A': { //auto uppercasing
+            validator: "[A-Za-z]",
+            cardinality: 1,
+            casing: "upper"
+        }
+    });
+    //date & time aliases
+    $.extend($.inputmask.defaults.definitions, {
         'h': { //hours
             validator: "[01][0-9]|2[0-3]",
             cardinality: 2,
@@ -19,17 +28,17 @@ Optional extentions on the jquery.inputmask base
             cardinality: 2,
             prevalidator: [{ validator: "[0-5]", cardinality: 1}]
         },
-        'd': { //day
+        'd': { //basic day
             validator: "0[1-9]|[12][0-9]|3[01]",
             cardinality: 2,
             prevalidator: [{ validator: "[0-3]", cardinality: 1}]
         },
-        'm': { //month
+        'm': { //basic month
             validator: "0[1-9]|1[012]",
             cardinality: 2,
             prevalidator: [{ validator: "[01]", cardinality: 1}]
         },
-        'y': { //year
+        'y': { //basic year
             validator: "(19|20)\\d\\d",
             cardinality: 4,
             prevalidator: [
@@ -37,20 +46,14 @@ Optional extentions on the jquery.inputmask base
                         { validator: "(19|20)", cardinality: 2 },
                         { validator: "(19|20)\\d", cardinality: 3 }
                         ]
-        },
-        'A': {
-            validator: "[A-Za-z]",
-            cardinality: 1,
-            casing: "upper"
         }
     });
-    //aliases
     $.extend($.inputmask.defaults.aliases, {
         'dd/mm/yyyy': {
             mask: "d/m/y",
             placeholder: "dd/mm/yyyy",
             regex: {
-            	monthpre: new RegExp("[01]"),
+                monthpre: new RegExp("[01]"),
                 month: new RegExp("((0[1-9]|[12][0-9])\/(0[1-9]|1[012]))|(30\/(0[13-9]|1[012]))|(31\/(0[13578]|1[02]))"),
                 year: new RegExp("(19|20)\\d\\d"),
                 daypre: new RegExp("[0-3]"),
@@ -59,7 +62,19 @@ Optional extentions on the jquery.inputmask base
             definitions: {
                 'd': { //day
                     validator: function(chrs, buffer, pos, strict, opts) {
-                        return opts.regex.day.test(chrs);
+                        var isValid = opts.regex.day.test(chrs);
+                        if (!strict && !isValid) {
+                            if (chrs.charAt(1) == '/') {
+                                isValid = opts.regex.day.test("0" + chrs.charAt(0));
+                                if (isValid) {
+                                    buffer[pos - 1] = "0";
+                                    buffer[pos] = chrs.charAt(0);
+                                    pos++;
+                                    return pos;
+                                }
+                            }
+                        }
+                        return isValid;
                     },
                     cardinality: 2,
                     prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
@@ -78,107 +93,40 @@ Optional extentions on the jquery.inputmask base
                     'm': { //month
                         validator: function(chrs, buffer, pos, strict, opts) {
                             var dayValue = buffer.join('').substr(0, 3);
-                            return opts.regex.month.test(dayValue + chrs);
-                        },
-                        cardinality: 2,
-                        prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
-                        var isValid = opts.regex.monthpre.test(chrs);
-                        if (!strict && !isValid) {
-	                        var dayValue = buffer.join('').substr(0, 3);
-                            isValid = opts.regex.month.test(dayValue + "0" + chrs);
-                            if (isValid) {
-                                buffer[pos] = "0";
-                                pos++;
-                                return pos;
-                            }
-                        }
-                        return isValid;
-                    }, cardinality: 1}]
-                    },
-                    'y': { //year
-                        validator: function(chrs, buffer, pos, strict, opts) {
-                            if (opts.regex.year.test(chrs)) {
-                                var dayMonthValue = buffer.join('').substr(0, 6);
-                                if (dayMonthValue != "29/02/")
-                                    return true;
-                                else {
-                                    var year = parseInt(chrs);  //detect leap year
-                                    if (year % 4 == 0)
-                                        if (year % 100 == 0)
-                                        if (year % 400 == 0)
-                                        return true;
-                                    else return false;
-                                    else return true;
-                                    else return false;
+                            var isValid = opts.regex.month.test(dayValue + chrs);
+                            if (!strict && !isValid) {
+                                if (chrs.charAt(1) == '/') {
+                                    isValid = opts.regex.month.test(dayValue + "0" + chrs.charAt(0));
+                                    if (isValid) {
+                                        buffer[pos - 1] = "0";
+                                        buffer[pos] = chrs.charAt(0);
+                                        pos++;
+                                        return pos;
+                                    }
                                 }
-                            } else return false;
-                        },
-                        cardinality: 4,
-                        prevalidator: [
-                        { validator: "[12]", cardinality: 1 },
-                        { validator: "(19|20)", cardinality: 2 },
-                        { validator: "(19|20)\\d", cardinality: 3 }
-                        ]
-                    }
-                },
-                insertMode: false,
-                autoUnmask: false
-            },
-            'mm/dd/yyyy': {
-                mask: "m/d/y",
-                placeholder: "mm/dd/yyyy",
-                regex: {
-                    day: new RegExp("((0[1-9]|1[012])\/(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\/30)|((0[13578]|1[02])\/31)"),
-                    daypre: new RegExp("((0[13-9]|1[012])\/[0-3])|(02\/[0-2])"),
-                    month: new RegExp("0[1-9]|1[012]"),
-                    monthpre: new RegExp("[01]"),
-                    year: new RegExp("(19|20)\\d\\d")
-                },
-                definitions: {
-                    'd': { //day
-                        validator: function(chrs, buffer, pos, strict, opts) {
-                            var monthValue = buffer.join('').substr(0, 3);
-                            return opts.regex.day.test(monthValue + chrs);
+                            }
+                            return isValid;
                         },
                         cardinality: 2,
                         prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
-                            var monthValue = buffer.join('').substr(0, 3);
-                            var isValid = opts.regex.daypre.test(monthValue + chrs);
+                            var isValid = opts.regex.monthpre.test(chrs);
                             if (!strict && !isValid) {
-                            	isValid = opts.regex.day.test(monthValue + "0" + chrs);
-                            	if (isValid) {
-                                	buffer[pos] = "0";
-                                	pos++;
-                                	return pos;
-                            	}
-                        	}
-                        	return isValid;
-                        },
-                            cardinality: 1}]
+                                var dayValue = buffer.join('').substr(0, 3);
+                                isValid = opts.regex.month.test(dayValue + "0" + chrs);
+                                if (isValid) {
+                                    buffer[pos] = "0";
+                                    pos++;
+                                    return pos;
+                                }
+                            }
+                            return isValid;
+                        }, cardinality: 1}]
                         },
-          			'm': { //month
-            				validator: function(chrs, buffer, pos, strict, opts) {
-                      			return opts.regex.month.test(chrs);
-                    		},
-            				cardinality: 2,
-            				prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
-                        		var isValid = opts.regex.monthpre.test(chrs);
-                        		if (!strict && !isValid) {
-                            		isValid = opts.regex.month.test("0" + chrs);
-                            		if (isValid) {
-                                		buffer[pos] = "0";
-                                		pos++;
-                                		return pos;
-                            		}
-                        		}
-                        		return isValid;
-                    		}, cardinality: 1}]
-        				},
-                    'y': { //year
+                        'y': { //year
                             validator: function(chrs, buffer, pos, strict, opts) {
                                 if (opts.regex.year.test(chrs)) {
-                                    var monthDayValue = buffer.join('').substr(0, 6);
-                                    if (monthDayValue != "02/29/")
+                                    var dayMonthValue = buffer.join('').substr(0, 6);
+                                    if (dayMonthValue != "29/02/")
                                         return true;
                                     else {
                                         var year = parseInt(chrs);  //detect leap year
@@ -203,134 +151,170 @@ Optional extentions on the jquery.inputmask base
                     insertMode: false,
                     autoUnmask: false
                 },
-                'hh:mm:ss': {
-                    mask: "h:s:s",
-                    autoUnmask: false
-                },
-                'hh:mm': {
-                    mask: "h:s",
-                    autoUnmask: false
-                },
-                'date': {
-                    alias: "dd/mm/yyyy" // "mm/dd/yyyy"
-                },
-                'datetime': {
-                    mask: "d/m/y h:s",
-                    placeholder: "dd/mm/yyyy hh:mm",
+                'mm/dd/yyyy': {
+                    mask: "m/d/y",
+                    placeholder: "mm/dd/yyyy",
                     regex: {
-                        month: new RegExp("((0[1-9]|[12][0-9])\/(0[1-9]|1[012]))|(30\/(0[13-9]|1[012]))|(31\/(0[13578]|1[02]))"),
+                        day: new RegExp("((0[1-9]|1[012])\/(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\/30)|((0[13578]|1[02])\/31)"),
+                        daypre: new RegExp("((0[13-9]|1[012])\/[0-3])|(02\/[0-2])"),
+                        month: new RegExp("0[1-9]|1[012]"),
+                        monthpre: new RegExp("[01]"),
                         year: new RegExp("(19|20)\\d\\d")
                     },
                     definitions: {
-                        'm': { //month
+                        'd': { //day
                             validator: function(chrs, buffer, pos, strict, opts) {
-                                var dayValue = buffer.join('').substr(0, 3);
-                                return opts.regex.month.test(dayValue + chrs);
+                                var monthValue = buffer.join('').substr(0, 3);
+                                var isValid = opts.regex.day.test(monthValue + chrs);
+                                if (!strict && !isValid) {
+                                    if (chrs.charAt(1) == '/') {
+                                        isValid = opts.regex.day.test(monthValue + "0" + chrs.charAt(0));
+                                        if (isValid) {
+                                            buffer[pos - 1] = "0";
+                                            buffer[pos] = chrs.charAt(0);
+                                            pos++;
+                                            return pos;
+                                        }
+                                    }
+                                }
+                                return isValid;
                             },
                             cardinality: 2,
-                            prevalidator: [{ validator: "[01]", cardinality: 1}]
-                        },
-                        'y': { //year
-                            validator: function(chrs, buffer, pos, strict, opts) {
-                                if (opts.regex.year.test(chrs)) {
-                                    var dayMonthValue = buffer.join('').substr(0, 6);
-                                    if (dayMonthValue != "29/02/")
-                                        return true;
-                                    else {
-                                        var year = parseInt(chrs);  //detect leap year
-                                        if (year % 4 == 0)
-                                            if (year % 100 == 0)
-                                            if (year % 400 == 0)
-                                            return true;
-                                        else return false;
-                                        else return true;
-                                        else return false;
+                            prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
+                                var monthValue = buffer.join('').substr(0, 3);
+                                var isValid = opts.regex.daypre.test(monthValue + chrs);
+                                if (!strict && !isValid) {
+                                    isValid = opts.regex.day.test(monthValue + "0" + chrs);
+                                    if (isValid) {
+                                        buffer[pos] = "0";
+                                        pos++;
+                                        return pos;
                                     }
-                                } else return false;
+                                }
+                                return isValid;
                             },
-                            cardinality: 4,
-                            prevalidator: [
+                                cardinality: 1}]
+                            },
+                            'm': { //month
+                                validator: function(chrs, buffer, pos, strict, opts) {
+                                    var isValid = opts.regex.month.test(chrs);
+                                    if (!strict && !isValid) {
+                                        if (chrs.charAt(1) == '/') {
+                                            isValid = opts.regex.month.test("0" + chrs.charAt(0));
+                                            if (isValid) {
+                                                buffer[pos - 1] = "0";
+                                                buffer[pos] = chrs.charAt(0);
+                                                pos++;
+                                                return pos;
+                                            }
+                                        }
+                                    }
+                                    return isValid;
+                                },
+                                cardinality: 2,
+                                prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
+                                    var isValid = opts.regex.monthpre.test(chrs);
+                                    if (!strict && !isValid) {
+                                        isValid = opts.regex.month.test("0" + chrs);
+                                        if (isValid) {
+                                            buffer[pos] = "0";
+                                            pos++;
+                                            return pos;
+                                        }
+                                    }
+                                    return isValid;
+                                }, cardinality: 1}]
+                                },
+                                'y': { //year
+                                    validator: function(chrs, buffer, pos, strict, opts) {
+                                        if (opts.regex.year.test(chrs)) {
+                                            var monthDayValue = buffer.join('').substr(0, 6);
+                                            if (monthDayValue != "02/29/")
+                                                return true;
+                                            else {
+                                                var year = parseInt(chrs);  //detect leap year
+                                                if (year % 4 == 0)
+                                                    if (year % 100 == 0)
+                                                    if (year % 400 == 0)
+                                                    return true;
+                                                else return false;
+                                                else return true;
+                                                else return false;
+                                            }
+                                        } else return false;
+                                    },
+                                    cardinality: 4,
+                                    prevalidator: [
                         { validator: "[12]", cardinality: 1 },
                         { validator: "(19|20)", cardinality: 2 },
                         { validator: "(19|20)\\d", cardinality: 3 }
                         ]
-                        }
-                    },
-                    insertMode: false,
-                    autoUnmask: false
-                },
-                //number aliases by Dean (datimson)
-                'decimal': {
-                    mask: "~",
-                    placeholder: "",
-                    repeat: 10,
-                    greedy: false,
-                    radixPoint: "\.", // | ","
-                    regex: {
-                        real: function(radixPoint) { return new RegExp("^([\+\-]?[0-9]*[" + radixPoint + "]?[0-9]*)$"); }
-                    },
-                    definitions: {
-                        '~': { //real number
-                            validator: function(chrs, buffer, pos, strict, opts) {
-                                var myBuffer = buffer.slice();
-                                myBuffer.splice(pos, 0, chrs);
-                                var test = myBuffer.join('');
-                                var isValid = opts.regex.real(opts.radixPoint).test(test);
-                                return isValid;
+                                }
                             },
-                            cardinality: 1,
-                            prevalidator: null
+                            insertMode: false,
+                            autoUnmask: false
+                        },
+                        'hh:mm:ss': {
+                            mask: "h:s:s",
+                            autoUnmask: false
+                        },
+                        'hh:mm': {
+                            mask: "h:s",
+                            autoUnmask: false
+                        },
+                        'date': {
+                            alias: "dd/mm/yyyy" // "mm/dd/yyyy"
+                        },
+                        'datetime': {
+                            mask: "d/m/y h:s",
+                            placeholder: "dd/mm/yyyy hh:mm",
+                            alias: "date"
                         }
-                    },
-                    insertMode: true
-                },
-                'non-negative-decimal': {
-                    mask: "~",
-                    placeholder: "",
-                    repeat: 10,
-                    greedy: false,
-                    radixPoint: "\.", // | ","
-                    regex: {
-                        decimal: function(radixPoint) { return new RegExp("^([0-9]+[" + radixPoint + "]?[0-9]*)$"); }
-                    },
-                    definitions: {
-                        '~': {
-                            validator: function(chrs, buffer, pos, strict, opts) {
-                                var myBuffer = buffer.slice();
-                                myBuffer.splice(pos, 0, chrs);
-                                var test = myBuffer.join('');
-                                var isValid = opts.regex.decimal(opts.radixPoint).test(test);
-                                return isValid;
+                    });
+                    //number aliases by Dean (datimson)
+                    $.extend($.inputmask.defaults, {
+                        radixPoint: "\.", // | ","
+                        digits: "*", //numer of digits
+                        groupSeparator: ",", // | "\."
+                        groupSize: 3
+                    });
+                    $.extend($.inputmask.defaults.aliases, {
+                        'decimal': {
+                            mask: "~",
+                            placeholder: "",
+                            repeat: 10,
+                            greedy: false,
+                            regex: {
+                                number: function(radixPoint, digits) { return new RegExp("^([\+\-]?[0-9]*[" + radixPoint + "]?[0-9]" + digits + ")$"); }
                             },
-                            cardinality: 1,
-                            prevalidator: null
-                        }
-                    },
-                    insertMode: true
-                },
-                'integer': {
-                    mask: "~",
-                    placeholder: "",
-                    repeat: 10,
-                    greedy: false,
-                    numericInput: true,
-                    regex: {
-                        integer: new RegExp("^([\+\-]?[0-9]*)$")
-                    },
-                    definitions: {
-                        '~': {
-                            validator: function(chrs, buffer, pos, strict, opts) {
-                                var myBuffer = buffer.slice();
-                                myBuffer.splice(pos, 0, chrs);
-                                var test = myBuffer.join('');
-                                var isValid = opts.regex.integer.test(test);
-                                return isValid;
+                            definitions: {
+                                '~': { //real number
+                                    validator: function(chrs, buffer, pos, strict, opts) {
+                                        function digitExpression() { return opts.digits; } //enhance me
+                                        var bufferStr = buffer.slice().splice(pos, 0, chrs).join('');
+                                        var isValid = opts.regex.number(opts.radixPoint, digitExpression()).test(bufferStr);
+                                        if (!strict && !isValid) {
+                                            //todo grouping, radixpoint handling
+                                        }
+                                        return isValid;
+                                    },
+                                    cardinality: 1,
+                                    prevalidator: null
+                                }
+                            },
+                            insertMode: true
+                        },
+                        'non-negative-decimal': {
+                            regex: {
+                                number: function(radixPoint, digits) { return new RegExp("^([0-9]+[" + radixPoint + "]?[0-9]" + digits + ")$"); }
                             },
-                            cardinality: 1,
-                            prevalidator: null
+                            alias: "decimal"
+                        },
+                        'integer': {
+                            regex: {
+                                number: function() { return new RegExp("^([\+\-]?[0-9]*)$"); }
+                            },
+                            alias: "decimal"
                         }
-                    },
-                    insertMode: true
-                }
-            });
-        })(jQuery);
+                    });
+                })(jQuery);

+ 18 - 16
jquery.inputmask.js

@@ -3,7 +3,7 @@ Input Mask plugin for jquery
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 0.5.6
+Version: 0.5.7b
  
 This plugin is based on the masked input plugin written by Josh Bush (digitalbush.com)
 */
@@ -149,14 +149,14 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             }
 
             //helper functions
-            function ResolveAlias(aliasStr) {
+           function ResolveAlias(aliasStr) {
                 var aliasDefinition = opts.aliases[aliasStr];
-                if (aliasDefinition)
-                    if (!aliasDefinition.alias) {
+                if (aliasDefinition) {
+                    if (aliasDefinition.alias) ResolveAlias(aliasDefinition.alias); //alias is another alias
                     $.extend(true, opts, aliasDefinition);  //merge alias definition in the options
                     $.extend(true, opts, options);  //reapply extra given options
                     return true;
-                } else return ResolveAlias(aliasDefinition.alias); //alias is another alias
+                }
                 return false;
             }
 
@@ -652,22 +652,24 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                         }
                         if ($.fn.val.inputmaskpatch != true) {
                             $.fn.val = function() {
-                                var $self = $(this);
-                                if ($self.data('inputmask')) {
-                                    if (arguments.length == 0) {
+                                if (arguments.length == 0) {
+                                    var $self = $(this);
+                                    if ($self.data('inputmask')) {
                                         if ($self.data('inputmask')['autoUnmask'])
                                             return $self.inputmask('unmaskedvalue');
                                         else {
-                                            var result = $.inputmask.val.apply(this);
+                                            var result = $.inputmask.val.apply($self);
                                             return result != $self.data('inputmask')['_buffer'].join('') ? result : '';
                                         }
-                                    } else {
-                                        var result = $.inputmask.val.apply(this, arguments);
-                                        this.triggerHandler('setvalue.inputmask');
-                                    }
-                                }
-                                else {
-                                    return $.inputmask.val.apply(this, arguments);
+                                    } else return $.inputmask.val.apply($self);
+                                } else {
+                                    var args = arguments;
+                                    return this.each(function() {
+                                        var $self = $(this);
+                                        var result = $.inputmask.val.apply($self, args);
+                                        if ($self.data('inputmask')) $self.triggerHandler('setvalue.inputmask');
+                                        return result;
+                                    });
                                 }
                             };
                             $.extend($.fn.val, {