maskedinput-rails 1.3.1.0 → 1.4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 371e6a54d30e96bf358999264df196758885829c
4
+ data.tar.gz: deffdca2fbbeb5367399f7a7525c53830586fe63
5
+ SHA512:
6
+ metadata.gz: 30da21c8a20d2a1e7274d0ae0136b83478aebbe70316f75f132ffc20c654d33ad041c15f58b3f88bbe57b4402084d97cade4d1160b041bcfe6c4938ee2eae1b8
7
+ data.tar.gz: 5d23f0119f5a6788689e4b5aa1912e44acfa720fd28c2c51ff46dca4ceec8843f437d465f3d0715b72d88e921374ed39c97447a8cfbcd2dc04d492b4814fa031
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "maskedinput-rails"
7
- gem.version = "1.3.1.0"
7
+ gem.version = "1.4.0.0"
8
8
  gem.authors = ["Carlos Alexandro Becker"]
9
9
  gem.email = ["caarlos0@gmail.com"]
10
10
  gem.description = %q{jquery.maskedinput for rails.}
@@ -1,338 +1,182 @@
1
1
  /*
2
- Masked Input plugin for jQuery
3
- Copyright (c) 2007-2013 Josh Bush (digitalbush.com)
4
- Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
5
- Version: 1.3.1
2
+ jQuery Masked Input Plugin
3
+ Copyright (c) 2007 - 2014 Josh Bush (digitalbush.com)
4
+ Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
5
+ Version: 1.4.0
6
6
  */
7
- (function($) {
8
- function getPasteEvent() {
9
- var el = document.createElement('input'),
10
- name = 'onpaste';
11
- el.setAttribute(name, '');
12
- return (typeof el[name] === 'function')?'paste':'input';
13
- }
14
-
15
- var pasteEventName = getPasteEvent() + ".mask",
16
- ua = navigator.userAgent,
17
- iPhone = /iphone/i.test(ua),
18
- android=/android/i.test(ua),
19
- caretTimeoutId;
20
-
21
- $.mask = {
22
- //Predefined character definitions
23
- definitions: {
24
- '9': "[0-9]",
25
- 'a': "[A-Za-z]",
26
- '*': "[A-Za-z0-9]"
27
- },
28
- dataName: "rawMaskFn",
29
- placeholder: '_',
30
- };
31
-
32
- $.fn.extend({
33
- //Helper Function for Caret positioning
34
- caret: function(begin, end) {
35
- var range;
36
-
37
- if (this.length === 0 || this.is(":hidden")) {
38
- return;
39
- }
40
-
41
- if (typeof begin == 'number') {
42
- end = (typeof end === 'number') ? end : begin;
43
- return this.each(function() {
44
- if (this.setSelectionRange) {
45
- this.setSelectionRange(begin, end);
46
- } else if (this.createTextRange) {
47
- range = this.createTextRange();
48
- range.collapse(true);
49
- range.moveEnd('character', end);
50
- range.moveStart('character', begin);
51
- range.select();
52
- }
53
- });
54
- } else {
55
- if (this[0].setSelectionRange) {
56
- begin = this[0].selectionStart;
57
- end = this[0].selectionEnd;
58
- } else if (document.selection && document.selection.createRange) {
59
- range = document.selection.createRange();
60
- begin = 0 - range.duplicate().moveStart('character', -100000);
61
- end = begin + range.text.length;
62
- }
63
- return { begin: begin, end: end };
64
- }
65
- },
66
- unmask: function() {
67
- return this.trigger("unmask");
68
- },
69
- mask: function(mask, settings) {
70
- var input,
71
- defs,
72
- tests,
73
- partialPosition,
74
- firstNonMaskPos,
75
- len;
76
-
77
- if (!mask && this.length > 0) {
78
- input = $(this[0]);
79
- return input.data($.mask.dataName)();
80
- }
81
- settings = $.extend({
82
- placeholder: $.mask.placeholder, // Load default placeholder
83
- completed: null
84
- }, settings);
85
-
86
-
87
- defs = $.mask.definitions;
88
- tests = [];
89
- partialPosition = len = mask.length;
90
- firstNonMaskPos = null;
91
-
92
- $.each(mask.split(""), function(i, c) {
93
- if (c == '?') {
94
- len--;
95
- partialPosition = i;
96
- } else if (defs[c]) {
97
- tests.push(new RegExp(defs[c]));
98
- if (firstNonMaskPos === null) {
99
- firstNonMaskPos = tests.length - 1;
100
- }
101
- } else {
102
- tests.push(null);
103
- }
104
- });
105
-
106
- return this.trigger("unmask").each(function() {
107
- var input = $(this),
108
- buffer = $.map(
109
- mask.split(""),
110
- function(c, i) {
111
- if (c != '?') {
112
- return defs[c] ? settings.placeholder : c;
113
- }
114
- }),
115
- focusText = input.val();
116
-
117
- function seekNext(pos) {
118
- while (++pos < len && !tests[pos]);
119
- return pos;
120
- }
121
-
122
- function seekPrev(pos) {
123
- while (--pos >= 0 && !tests[pos]);
124
- return pos;
125
- }
126
-
127
- function shiftL(begin,end) {
128
- var i,
129
- j;
130
-
131
- if (begin<0) {
132
- return;
133
- }
134
-
135
- for (i = begin, j = seekNext(end); i < len; i++) {
136
- if (tests[i]) {
137
- if (j < len && tests[i].test(buffer[j])) {
138
- buffer[i] = buffer[j];
139
- buffer[j] = settings.placeholder;
140
- } else {
141
- break;
7
+ !function(factory) {
8
+ "function" == typeof define && define.amd ? define([ "jquery" ], factory) : factory("object" == typeof exports ? require("jquery") : jQuery);
9
+ }(function($) {
10
+ var caretTimeoutId, ua = navigator.userAgent, iPhone = /iphone/i.test(ua), chrome = /chrome/i.test(ua), android = /android/i.test(ua);
11
+ $.mask = {
12
+ definitions: {
13
+ "9": "[0-9]",
14
+ a: "[A-Za-z]",
15
+ "*": "[A-Za-z0-9]"
16
+ },
17
+ autoclear: !0,
18
+ dataName: "rawMaskFn",
19
+ placeholder: "_"
20
+ }, $.fn.extend({
21
+ caret: function(begin, end) {
22
+ var range;
23
+ if (0 !== this.length && !this.is(":hidden")) return "number" == typeof begin ? (end = "number" == typeof end ? end : begin,
24
+ this.each(function() {
25
+ this.setSelectionRange ? this.setSelectionRange(begin, end) : this.createTextRange && (range = this.createTextRange(),
26
+ range.collapse(!0), range.moveEnd("character", end), range.moveStart("character", begin),
27
+ range.select());
28
+ })) : (this[0].setSelectionRange ? (begin = this[0].selectionStart, end = this[0].selectionEnd) : document.selection && document.selection.createRange && (range = document.selection.createRange(),
29
+ begin = 0 - range.duplicate().moveStart("character", -1e5), end = begin + range.text.length),
30
+ {
31
+ begin: begin,
32
+ end: end
33
+ });
34
+ },
35
+ unmask: function() {
36
+ return this.trigger("unmask");
37
+ },
38
+ mask: function(mask, settings) {
39
+ var input, defs, tests, partialPosition, firstNonMaskPos, lastRequiredNonMaskPos, len, oldVal;
40
+ if (!mask && this.length > 0) {
41
+ input = $(this[0]);
42
+ var fn = input.data($.mask.dataName);
43
+ return fn ? fn() : void 0;
142
44
  }
143
-
144
- j = seekNext(j);
145
- }
45
+ return settings = $.extend({
46
+ autoclear: $.mask.autoclear,
47
+ placeholder: $.mask.placeholder,
48
+ completed: null
49
+ }, settings), defs = $.mask.definitions, tests = [], partialPosition = len = mask.length,
50
+ firstNonMaskPos = null, $.each(mask.split(""), function(i, c) {
51
+ "?" == c ? (len--, partialPosition = i) : defs[c] ? (tests.push(new RegExp(defs[c])),
52
+ null === firstNonMaskPos && (firstNonMaskPos = tests.length - 1), partialPosition > i && (lastRequiredNonMaskPos = tests.length - 1)) : tests.push(null);
53
+ }), this.trigger("unmask").each(function() {
54
+ function tryFireCompleted() {
55
+ if (settings.completed) {
56
+ for (var i = firstNonMaskPos; lastRequiredNonMaskPos >= i; i++) if (tests[i] && buffer[i] === getPlaceholder(i)) return;
57
+ settings.completed.call(input);
58
+ }
59
+ }
60
+ function getPlaceholder(i) {
61
+ return settings.placeholder.charAt(i < settings.placeholder.length ? i : 0);
62
+ }
63
+ function seekNext(pos) {
64
+ for (;++pos < len && !tests[pos]; ) ;
65
+ return pos;
66
+ }
67
+ function seekPrev(pos) {
68
+ for (;--pos >= 0 && !tests[pos]; ) ;
69
+ return pos;
70
+ }
71
+ function shiftL(begin, end) {
72
+ var i, j;
73
+ if (!(0 > begin)) {
74
+ for (i = begin, j = seekNext(end); len > i; i++) if (tests[i]) {
75
+ if (!(len > j && tests[i].test(buffer[j]))) break;
76
+ buffer[i] = buffer[j], buffer[j] = getPlaceholder(j), j = seekNext(j);
77
+ }
78
+ writeBuffer(), input.caret(Math.max(firstNonMaskPos, begin));
79
+ }
80
+ }
81
+ function shiftR(pos) {
82
+ var i, c, j, t;
83
+ for (i = pos, c = getPlaceholder(pos); len > i; i++) if (tests[i]) {
84
+ if (j = seekNext(i), t = buffer[i], buffer[i] = c, !(len > j && tests[j].test(t))) break;
85
+ c = t;
86
+ }
87
+ }
88
+ function androidInputEvent() {
89
+ var curVal = input.val(), pos = input.caret();
90
+ if (curVal.length < oldVal.length) {
91
+ for (checkVal(!0); pos.begin > 0 && !tests[pos.begin - 1]; ) pos.begin--;
92
+ if (0 === pos.begin) for (;pos.begin < firstNonMaskPos && !tests[pos.begin]; ) pos.begin++;
93
+ input.caret(pos.begin, pos.begin);
94
+ } else {
95
+ for (checkVal(!0); pos.begin < len && !tests[pos.begin]; ) pos.begin++;
96
+ input.caret(pos.begin, pos.begin);
97
+ }
98
+ tryFireCompleted();
99
+ }
100
+ function blurEvent() {
101
+ checkVal(), input.val() != focusText && input.change();
102
+ }
103
+ function keydownEvent(e) {
104
+ if (!input.prop("readonly")) {
105
+ var pos, begin, end, k = e.which || e.keyCode;
106
+ oldVal = input.val(), 8 === k || 46 === k || iPhone && 127 === k ? (pos = input.caret(),
107
+ begin = pos.begin, end = pos.end, end - begin === 0 && (begin = 46 !== k ? seekPrev(begin) : end = seekNext(begin - 1),
108
+ end = 46 === k ? seekNext(end) : end), clearBuffer(begin, end), shiftL(begin, end - 1),
109
+ e.preventDefault()) : 13 === k ? blurEvent.call(this, e) : 27 === k && (input.val(focusText),
110
+ input.caret(0, checkVal()), e.preventDefault());
111
+ }
112
+ }
113
+ function keypressEvent(e) {
114
+ if (!input.prop("readonly")) {
115
+ var p, c, next, k = e.which || e.keyCode, pos = input.caret();
116
+ if (!(e.ctrlKey || e.altKey || e.metaKey || 32 > k) && k && 13 !== k) {
117
+ if (pos.end - pos.begin !== 0 && (clearBuffer(pos.begin, pos.end), shiftL(pos.begin, pos.end - 1)),
118
+ p = seekNext(pos.begin - 1), len > p && (c = String.fromCharCode(k), tests[p].test(c))) {
119
+ if (shiftR(p), buffer[p] = c, writeBuffer(), next = seekNext(p), android) {
120
+ var proxy = function() {
121
+ $.proxy($.fn.caret, input, next)();
122
+ };
123
+ setTimeout(proxy, 0);
124
+ } else input.caret(next);
125
+ pos.begin <= lastRequiredNonMaskPos && tryFireCompleted();
126
+ }
127
+ e.preventDefault();
128
+ }
129
+ }
130
+ }
131
+ function clearBuffer(start, end) {
132
+ var i;
133
+ for (i = start; end > i && len > i; i++) tests[i] && (buffer[i] = getPlaceholder(i));
134
+ }
135
+ function writeBuffer() {
136
+ input.val(buffer.join(""));
137
+ }
138
+ function checkVal(allow) {
139
+ var i, c, pos, test = input.val(), lastMatch = -1;
140
+ for (i = 0, pos = 0; len > i; i++) if (tests[i]) {
141
+ for (buffer[i] = getPlaceholder(i); pos++ < test.length; ) if (c = test.charAt(pos - 1),
142
+ tests[i].test(c)) {
143
+ buffer[i] = c, lastMatch = i;
144
+ break;
145
+ }
146
+ if (pos > test.length) {
147
+ clearBuffer(i + 1, len);
148
+ break;
149
+ }
150
+ } else buffer[i] === test.charAt(pos) && pos++, partialPosition > i && (lastMatch = i);
151
+ return allow ? writeBuffer() : partialPosition > lastMatch + 1 ? settings.autoclear || buffer.join("") === defaultBuffer ? (input.val() && input.val(""),
152
+ clearBuffer(0, len)) : writeBuffer() : (writeBuffer(), input.val(input.val().substring(0, lastMatch + 1))),
153
+ partialPosition ? i : firstNonMaskPos;
154
+ }
155
+ var input = $(this), buffer = $.map(mask.split(""), function(c, i) {
156
+ return "?" != c ? defs[c] ? getPlaceholder(i) : c : void 0;
157
+ }), defaultBuffer = buffer.join(""), focusText = input.val();
158
+ input.data($.mask.dataName, function() {
159
+ return $.map(buffer, function(c, i) {
160
+ return tests[i] && c != getPlaceholder(i) ? c : null;
161
+ }).join("");
162
+ }), input.one("unmask", function() {
163
+ input.off(".mask").removeData($.mask.dataName);
164
+ }).on("focus.mask", function() {
165
+ if (!input.prop("readonly")) {
166
+ clearTimeout(caretTimeoutId);
167
+ var pos;
168
+ focusText = input.val(), pos = checkVal(), caretTimeoutId = setTimeout(function() {
169
+ writeBuffer(), pos == mask.replace("?", "").length ? input.caret(0, pos) : input.caret(pos);
170
+ }, 10);
171
+ }
172
+ }).on("blur.mask", blurEvent).on("keydown.mask", keydownEvent).on("keypress.mask", keypressEvent).on("input.mask paste.mask", function() {
173
+ input.prop("readonly") || setTimeout(function() {
174
+ var pos = checkVal(!0);
175
+ input.caret(pos), tryFireCompleted();
176
+ }, 0);
177
+ }), chrome && android && input.off("input.mask").on("input.mask", androidInputEvent),
178
+ checkVal();
179
+ });
146
180
  }
147
- writeBuffer();
148
- input.caret(Math.max(firstNonMaskPos, begin));
149
- }
150
-
151
- function shiftR(pos) {
152
- var i,
153
- c,
154
- j,
155
- t;
156
-
157
- for (i = pos, c = settings.placeholder; i < len; i++) {
158
- if (tests[i]) {
159
- j = seekNext(i);
160
- t = buffer[i];
161
- buffer[i] = c;
162
- if (j < len && tests[j].test(t)) {
163
- c = t;
164
- } else {
165
- break;
166
- }
167
- }
168
- }
169
- }
170
-
171
- function keydownEvent(e) {
172
- var k = e.which,
173
- pos,
174
- begin,
175
- end;
176
-
177
- //backspace, delete, and escape get special treatment
178
- if (k === 8 || k === 46 || (iPhone && k === 127)) {
179
- pos = input.caret();
180
- begin = pos.begin;
181
- end = pos.end;
182
-
183
- if (end - begin === 0) {
184
- begin=k!==46?seekPrev(begin):(end=seekNext(begin-1));
185
- end=k===46?seekNext(end):end;
186
- }
187
- clearBuffer(begin, end);
188
- shiftL(begin, end - 1);
189
-
190
- e.preventDefault();
191
- } else if (k == 27) {//escape
192
- input.val(focusText);
193
- input.caret(0, checkVal());
194
- e.preventDefault();
195
- }
196
- }
197
-
198
- function keypressEvent(e) {
199
- var k = e.which,
200
- pos = input.caret(),
201
- p,
202
- c,
203
- next;
204
-
205
- if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore
206
- return;
207
- } else if (k) {
208
- if (pos.end - pos.begin !== 0){
209
- clearBuffer(pos.begin, pos.end);
210
- shiftL(pos.begin, pos.end-1);
211
- }
212
-
213
- p = seekNext(pos.begin - 1);
214
- if (p < len) {
215
- c = String.fromCharCode(k);
216
- if (tests[p].test(c)) {
217
- shiftR(p);
218
-
219
- buffer[p] = c;
220
- writeBuffer();
221
- next = seekNext(p);
222
-
223
- if(android){
224
- setTimeout($.proxy($.fn.caret,input,next),0);
225
- }else{
226
- input.caret(next);
227
- }
228
-
229
- if (settings.completed && next >= len) {
230
- settings.completed.call(input);
231
- }
232
- }
233
- }
234
- e.preventDefault();
235
- }
236
- }
237
-
238
- function clearBuffer(start, end) {
239
- var i;
240
- for (i = start; i < end && i < len; i++) {
241
- if (tests[i]) {
242
- buffer[i] = settings.placeholder;
243
- }
244
- }
245
- }
246
-
247
- function writeBuffer() { input.val(buffer.join('')); }
248
-
249
- function checkVal(allow) {
250
- //try to place characters where they belong
251
- var test = input.val(),
252
- lastMatch = -1,
253
- i,
254
- c;
255
-
256
- for (i = 0, pos = 0; i < len; i++) {
257
- if (tests[i]) {
258
- buffer[i] = settings.placeholder;
259
- while (pos++ < test.length) {
260
- c = test.charAt(pos - 1);
261
- if (tests[i].test(c)) {
262
- buffer[i] = c;
263
- lastMatch = i;
264
- break;
265
- }
266
- }
267
- if (pos > test.length) {
268
- break;
269
- }
270
- } else if (buffer[i] === test.charAt(pos) && i !== partialPosition) {
271
- pos++;
272
- lastMatch = i;
273
- }
274
- }
275
- if (allow) {
276
- writeBuffer();
277
- } else if (lastMatch + 1 < partialPosition) {
278
- input.val("");
279
- clearBuffer(0, len);
280
- } else {
281
- writeBuffer();
282
- input.val(input.val().substring(0, lastMatch + 1));
283
- }
284
- return (partialPosition ? i : firstNonMaskPos);
285
- }
286
-
287
- input.data($.mask.dataName,function(){
288
- return $.map(buffer, function(c, i) {
289
- return tests[i]&&c!=settings.placeholder ? c : null;
290
- }).join('');
291
- });
292
-
293
- if (!input.attr("readonly"))
294
- input
295
- .one("unmask", function() {
296
- input
297
- .unbind(".mask")
298
- .removeData($.mask.dataName);
299
- })
300
- .bind("focus.mask", function() {
301
- clearTimeout(caretTimeoutId);
302
- var pos,
303
- moveCaret;
304
-
305
- focusText = input.val();
306
- pos = checkVal();
307
-
308
- caretTimeoutId = setTimeout(function(){
309
- writeBuffer();
310
- if (pos == mask.length) {
311
- input.caret(0, pos);
312
- } else {
313
- input.caret(pos);
314
- }
315
- }, 10);
316
- })
317
- .bind("blur.mask", function() {
318
- checkVal();
319
- if (input.val() != focusText)
320
- input.change();
321
- })
322
- .bind("keydown.mask", keydownEvent)
323
- .bind("keypress.mask", keypressEvent)
324
- .bind(pasteEventName, function() {
325
- setTimeout(function() {
326
- var pos=checkVal(true);
327
- input.caret(pos);
328
- if (settings.completed && pos == input.val().length)
329
- settings.completed.call(input);
330
- }, 0);
331
- });
332
- checkVal(); //Perform initial check for existing values
333
181
  });
334
- }
335
- });
336
-
337
-
338
- })(jQuery);
182
+ });
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maskedinput-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1.0
5
- prerelease:
4
+ version: 1.4.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Carlos Alexandro Becker
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-16 00:00:00.000000000 Z
11
+ date: 2015-07-12 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: jquery.maskedinput for rails.
15
14
  email:
@@ -18,7 +17,7 @@ executables: []
18
17
  extensions: []
19
18
  extra_rdoc_files: []
20
19
  files:
21
- - .gitignore
20
+ - ".gitignore"
22
21
  - Gemfile
23
22
  - LICENSE.txt
24
23
  - README.md
@@ -28,26 +27,25 @@ files:
28
27
  - vendor/assets/javascripts/maskedinput.js
29
28
  homepage: http://caarlos0.github.com
30
29
  licenses: []
30
+ metadata: {}
31
31
  post_install_message:
32
32
  rdoc_options: []
33
33
  require_paths:
34
34
  - lib
35
35
  required_ruby_version: !ruby/object:Gem::Requirement
36
- none: false
37
36
  requirements:
38
- - - ! '>='
37
+ - - ">="
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
41
40
  required_rubygems_version: !ruby/object:Gem::Requirement
42
- none: false
43
41
  requirements:
44
- - - ! '>='
42
+ - - ">="
45
43
  - !ruby/object:Gem::Version
46
44
  version: '0'
47
45
  requirements: []
48
46
  rubyforge_project:
49
- rubygems_version: 1.8.23
47
+ rubygems_version: 2.4.5
50
48
  signing_key:
51
- specification_version: 3
49
+ specification_version: 4
52
50
  summary: jquery.maskedinput for rails.
53
51
  test_files: []