Skip to content

Commit 9dacfd1

Browse files
committed
Mask: Initial draft of _caret, implementation borrowed from @digitalBush maskedInput plugin
1 parent 5b7fa97 commit 9dacfd1

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

tests/unit/mask/mask.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ <h2 id="qunit-banner"></h2>
3232
<h2 id="qunit-userAgent"></h2>
3333
<ol id="qunit-tests"></ol>
3434
<div id="qunit-fixture">
35-
35+
<input id="mask1" type="text">
3636
</div>
3737
</body>
3838
</html>

tests/unit/mask/mask_core.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,30 @@
22

33
module( "mask: core" );
44

5+
test( "_caret() can move and read the text cursor", function() {
6+
expect( 3 );
7+
8+
var input = $( "#mask1" ).val("This string is 33 characters long").mask(),
9+
instance = input.data( "mask" );
10+
input.focus();
11+
12+
instance._caret( 0 );
13+
deepEqual( instance._caret(), {
14+
begin: 0,
15+
end: 0
16+
}, "Caret position set to 0 results in 0, 0" );
17+
18+
instance._caret( 34 );
19+
deepEqual( instance._caret(), {
20+
begin: 33,
21+
end: 33
22+
}, "Caret position set beyond bounds (34) results in 33, 33" );
23+
24+
instance._caret( 0, 2 );
25+
deepEqual( instance._caret(), {
26+
begin: 0,
27+
end: 2
28+
}, "Caret position set to 0, 2 results in 0, 2" );
29+
});
30+
531
}( jQuery ) );

ui/jquery.ui.mask.js

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,45 @@ $.widget( "ui.mask", {
1818
},
1919
_create: function() {
2020

21+
},
22+
23+
// helper function to get or set position of text cursor (caret)
24+
_caret: function( begin, end ) {
25+
var range,
26+
elem = this.element,
27+
dom = elem[0];
28+
29+
// if begin is defined, we are setting a range
30+
if ( begin !== undefined ) {
31+
end = ( end === undefined ) ? begin : end;
32+
if ( dom.setSelectionRange ) {
33+
dom.setSelectionRange( begin, end );
34+
} else if ( dom.createTextRange ) {
35+
range = dom.createTextRange();
36+
range.collapse( true );
37+
range.moveEnd( "character", end );
38+
range.moveStart( "character", begin );
39+
range.select();
40+
}
41+
} else {
42+
43+
// begin is undefined, we are reading the range
44+
if ( dom.setSelectionRange ) {
45+
begin = dom.selectionStart;
46+
end = dom.selectionEnd;
47+
} else if ( document.selection && document.selection.createRange ) {
48+
range = document.selection.createRange();
49+
50+
// the moveStart returns the number of characters it moved as a negative number
51+
begin = 0 - range.duplicate().moveStart( "character", -100000 );
52+
end = begin + range.text.length;
53+
}
54+
return {
55+
begin: begin,
56+
end: end
57+
};
58+
}
2159
}
2260
});
2361

24-
25-
})( jQuery );
62+
}( jQuery ) );

0 commit comments

Comments
 (0)