Skip to content
This repository was archived by the owner on Sep 8, 2020. It is now read-only.

Commit 927ee81

Browse files
k-one-o-twolukepfeiffer10
authored andcommitted
Update mask.js (#161)
* Update mask.js * reforamtting * ctrl+z test added ctrl+z test * Update maskSpec.js no jQ in test * Update maskSpec.js * Update maskSpec.js * Update maskSpec.js * Update maskSpec.js
1 parent 5a5dc26 commit 927ee81

File tree

2 files changed

+62
-17
lines changed

2 files changed

+62
-17
lines changed

src/mask.js

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -511,23 +511,30 @@ angular.module('ui.mask', [])
511511
}
512512

513513
function keydownHandler(e) {
514-
/*jshint validthis: true */
515-
var isKeyBackspace = e.which === 8,
516-
caretPos = getCaretPosition(this) - 1 || 0; //value in keydown is pre change so bump caret position back to simulate post change
517-
518-
if (isKeyBackspace) {
519-
while(caretPos >= 0) {
520-
if (isValidCaretPosition(caretPos)) {
521-
//re-adjust the caret position.
522-
//Increment to account for the initial decrement to simulate post change caret position
523-
setCaretPosition(this, caretPos + 1);
524-
break;
525-
}
526-
caretPos--;
527-
}
528-
preventBackspace = caretPos === -1;
529-
}
530-
}
514+
/*jshint validthis: true */
515+
var isKeyBackspace = e.which === 8,
516+
caretPos = getCaretPosition(this) - 1 || 0, //value in keydown is pre change so bump caret position back to simulate post change
517+
isCtrlZ = e.which === 90 && e.ctrlKey; //ctrl+z pressed
518+
519+
if (isKeyBackspace) {
520+
while(caretPos >= 0) {
521+
if (isValidCaretPosition(caretPos)) {
522+
//re-adjust the caret position.
523+
//Increment to account for the initial decrement to simulate post change caret position
524+
setCaretPosition(this, caretPos + 1);
525+
break;
526+
}
527+
caretPos--;
528+
}
529+
preventBackspace = caretPos === -1;
530+
}
531+
532+
if (isCtrlZ) {
533+
// prevent IE bug - value should be returned to initial state
534+
iElement.val('');
535+
e.preventDefault();
536+
}
537+
}
531538

532539
function eventHandler(e) {
533540
/*jshint validthis: true */

test/maskSpec.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,44 @@ describe("uiMask", function () {
805805
input.triggerHandler("blur");
806806
expect(scope.test.input.$invalid).toBe(false);
807807
});
808+
809+
it("should clear input on ctrl+z pressed", function() {
810+
var form = compileElement(formHtml);
811+
var input = form.find("input");
812+
813+
function triggerKeyboardEvent(el, type, keyCode, ctrlKey) {
814+
var eventObj = document.createEvent('Events');
815+
816+
if (eventObj.initEvent) {
817+
eventObj.initEvent('key' + type, true, true);
818+
}
819+
820+
eventObj.keyCode = keyCode;
821+
eventObj.which = keyCode;
822+
eventObj.ctrlKey = ctrlKey;
823+
824+
el.dispatchEvent(eventObj);
825+
}
826+
827+
var triggerCtrlZ = function (element) {
828+
triggerKeyboardEvent(element[0], 'down', 90, true);
829+
triggerKeyboardEvent(element[0], 'up');
830+
};
831+
832+
var triggerInput = function(element) {
833+
var evt = document.createEvent('HTMLEvents');
834+
evt.initEvent('input', false, true);
835+
element[0].dispatchEvent(evt);
836+
};
837+
838+
scope.$apply("mask = '99.99.9999'");
839+
input.val('11111111');
840+
triggerInput(input);
841+
expect(input.clone().val()).toBe('11.11.1111');
842+
triggerCtrlZ(input);
843+
scope.$digest();
844+
expect(input.clone().val()).toBe('__.__.____');
845+
})
808846
});
809847

810848
describe("Configuration Provider", function() {

0 commit comments

Comments
 (0)