ソースを参照

fix selection with decimals

Robin Herbots 12 年 前
コミット
57db9cc048
5 ファイル変更117 行追加38 行削除
  1. 1 1
      build.properties
  2. 1 1
      component.json
  3. BIN
      dist/jQuery.InputMask.2.3.5.nupkg
  4. 1 1
      jquery.inputmask.jquery.json
  5. 114 35
      qunit/tests.js

+ 1 - 1
build.properties

@@ -7,7 +7,7 @@ distdir = dist
 
 build.major = 2
 build.minor = 3
-build.revision = 5
+build.revision = 6
 
 target = jquery.inputmask.bundle.js
 target.min = jquery.inputmask.bundle.min.js

+ 1 - 1
component.json

@@ -1,6 +1,6 @@
 {
     "name": "jquery.inputmask",
-    "version": "2.3.5",
+    "version": "2.3.6",
     "main": "./dist/jquery.inputmask.bundle.js",
     "dependencies": {
         "jquery": ">=1.5"

BIN
dist/jQuery.InputMask.2.3.5.nupkg


+ 1 - 1
jquery.inputmask.jquery.json

@@ -8,7 +8,7 @@
 		"inputmask",
 		"mask"
     ],
-    "version": "2.3.5",
+    "version": "2.3.6",
     "author": {
         "name": "Robin Herbots",
         "url": "http://github.com/RobinHerbots/jquery.inputmask"

+ 114 - 35
qunit/tests.js

@@ -2,7 +2,39 @@ var keyCodes = {
     ALT: 18, BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, COMMAND: 91, COMMAND_LEFT: 91, COMMAND_RIGHT: 93, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, MENU: 93, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108,
     NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38, WINDOWS: 91
 }
-
+function caret(input, begin, end) {
+    var npt = input.jquery && input.length > 0 ? input[0] : input, range;
+    if (typeof begin == 'number') {
+        if (!$(input).is(':visible')) {
+            return;
+        }
+        end = (typeof end == 'number') ? end : begin;
+        if (npt.setSelectionRange) {
+            npt.selectionStart = begin;
+            npt.selectionEnd = end;
+
+        } else if (npt.createTextRange) {
+            range = npt.createTextRange();
+            range.collapse(true);
+            range.moveEnd('character', end);
+            range.moveStart('character', begin);
+            range.select();
+        }
+    } else {
+        if (!$(input).is(':visible')) {
+            return { "begin": 0, "end": 0 };
+        }
+        if (npt.setSelectionRange) {
+            begin = npt.selectionStart;
+            end = npt.selectionEnd;
+        } else if (document.selection && document.selection.createRange) {
+            range = document.selection.createRange();
+            begin = 0 - range.duplicate().moveStart('character', -100000);
+            end = begin + range.text.length;
+        }
+        return { "begin": begin, "end": end };
+    }
+};
 $.fn.SendKey = function (keyCode, modifier) {
     var sendDummyKeydown = false;
     if (Object.prototype.toString.call(keyCode) == '[object String]') {
@@ -10,40 +42,6 @@ $.fn.SendKey = function (keyCode, modifier) {
         sendDummyKeydown = true;
     }
 
-    function caret(input, begin, end) {
-        var npt = input.jquery && input.length > 0 ? input[0] : input, range;
-        if (typeof begin == 'number') {
-            if (!$(input).is(':visible')) {
-                return;
-            }
-            end = (typeof end == 'number') ? end : begin;
-            if (npt.setSelectionRange) {
-                npt.selectionStart = begin;
-                npt.selectionEnd = end;
-
-            } else if (npt.createTextRange) {
-                range = npt.createTextRange();
-                range.collapse(true);
-                range.moveEnd('character', end);
-                range.moveStart('character', begin);
-                range.select();
-            }
-        } else {
-            if (!$(input).is(':visible')) {
-                return { "begin": 0, "end": 0 };
-            }
-            if (npt.setSelectionRange) {
-                begin = npt.selectionStart;
-                end = npt.selectionEnd;
-            } else if (document.selection && document.selection.createRange) {
-                range = document.selection.createRange();
-                begin = 0 - range.duplicate().moveStart('character', -100000);
-                end = begin + range.text.length;
-            }
-            return { "begin": begin, "end": end };
-        }
-    };
-
     switch (keyCode) {
         case keyCodes.LEFT: {
             if (modifier == undefined) {
@@ -253,6 +251,33 @@ test("inputmask(\"*****\")", function () {
     $("#testmask").remove();
 });
 
+module("Non-greedy masks");
+test("inputmask(\"*\", { greedy: false, repeat: \"*\" }) - replace cd with 1", function () {
+    $('body').append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("*", { greedy: false, repeat: "*" });
+
+    $("#testmask")[0].focus();
+
+    $("#testmask").Type("abcdef");
+    caret($("#testmask"), 2, 4);
+    $("#testmask").SendKey("1");
+    equal($("#testmask").val(), "ab1ef", "Result " + $("#testmask").val());
+
+    $("#testmask").remove();
+});
+
+test("inputmask(\"*\", { greedy: false, repeat: \"*\" }) - type abcdef", function () {
+    $('body').append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("*", { greedy: false, repeat: "*" });
+
+    $("#testmask")[0].focus();
+
+    $("#testmask").Type("abcdef");
+
+    equal($("#testmask").val(), "abcdef", "Result " + $("#testmask").val());
+
+    $("#testmask").remove();
+});
 
 module("Initial value setting");
 
@@ -800,6 +825,60 @@ test("inputmask(\"decimal, { repeat: 5 }\") - maxlength 10", function () {
     $("#testmask").remove();
 });
 
+test("inputmask(\"decimal\")", function () {
+    $('body').append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("decimal");
+
+    $("#testmask")[0].focus();
+
+    $("#testmask").Type("1234567890");
+    caret($("#testmask"), 0, 10);
+    $("#testmask").Type("12345");
+
+    equal($("#testmask").val(), "12345", "Result " + $("#testmask").val());
+    $("#testmask").remove();
+});
+
+test("inputmask(\"decimal\") - value=\"1234567890\"", function () {
+    $('body').append('<input type="text" id="testmask" value="1234567890" />');
+    $("#testmask").inputmask("decimal");
+
+    $("#testmask")[0].focus();
+
+    caret($("#testmask"), 0, 10);
+    $("#testmask").Type("12345");
+
+    equal($("#testmask").val(), "12345", "Result " + $("#testmask").val());
+    $("#testmask").remove();
+});
+
+test("inputmask(\"decimal\")", function () {
+    $('body').append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("decimal");
+
+    $("#testmask")[0].focus();
+
+    $("#testmask").Type("1234567890");
+    caret($("#testmask"), 3, 5);
+    $("#testmask").SendKey("0");
+
+    equal($("#testmask").val(), "123067890", "Result " + $("#testmask").val());
+    $("#testmask").remove();
+});
+
+test("inputmask(\"decimal\") - value=\"1234567890\"", function () {
+    $('body').append('<input type="text" id="testmask" value="1234567890" />');
+    $("#testmask").inputmask("decimal");
+
+    $("#testmask")[0].focus();
+
+    caret($("#testmask"), 3, 5);
+    $("#testmask").SendKey("0");
+
+    equal($("#testmask").val(), "123067890", "Result " + $("#testmask").val());
+    $("#testmask").remove();
+});
+
 module("Direction RTL");
 test("inputmask(\"999.999.999\") - delete 2nd with backspace, continue the mask", function () {
     $('body').append('<input type="text" id="testmask" dir="rtl" />');