c80_contest 0.1.7 → 0.1.8
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 +4 -4
- data/app/assets/javascripts/c80_contest.js.coffee +2 -1
- data/app/assets/javascripts/c80_contest/frontend/ajax_bid_form.js +7 -5
- data/app/assets/javascripts/lib/masked_input/jquery.maskedinput.js +453 -0
- data/app/views/c80_contest/shared/_bid_form.html.erb +1 -1
- data/lib/c80_contest/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bffc4588cf22bb6aca523694a936ccc9fdc350d
|
4
|
+
data.tar.gz: 82f92265d25042fdccef7a1bb94229bd4174b1f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 517885840fe6599b9aaacbcbd24a5e24f3f0b2c6bfdd077bf9111f637ef43c95e5fc5ac992ddb502d81631af080caf0034c408cd06bee2416f83ee53ae17245d
|
7
|
+
data.tar.gz: 3daedefbdc507583b9f1b0616f27c1a122bfc10e232d406169976c52bd7df3c0c166cd10664dea35ec849379948f3a7eea3f34ba5bc3d28236b3268352b83eeb
|
@@ -110,11 +110,13 @@ $(function () {
|
|
110
110
|
// mask: '+# (###) ###-##-##'
|
111
111
|
// });
|
112
112
|
|
113
|
-
var numberedFromClass = new Numbered('form#form_bid input#bid_phone', {
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
});
|
113
|
+
// var numberedFromClass = new Numbered('form#form_bid input#bid_phone', {
|
114
|
+
// mask: '+# (###) ###-##-##',
|
115
|
+
// empty: '_',
|
116
|
+
// placeholder: true
|
117
|
+
// });
|
118
|
+
|
119
|
+
$form.find('input#bid_phone').mask('+9(999)999-99-99');
|
118
120
|
|
119
121
|
setTimeout(function () {
|
120
122
|
$("#bid_photo").fileinput();
|
@@ -0,0 +1,453 @@
|
|
1
|
+
(function (factory) {
|
2
|
+
if (typeof define === 'function' && define.amd) {
|
3
|
+
// AMD. Register as an anonymous module.
|
4
|
+
define(['jquery'], factory);
|
5
|
+
} else if (typeof exports === 'object') {
|
6
|
+
// Node/CommonJS
|
7
|
+
factory(require('jquery'));
|
8
|
+
} else {
|
9
|
+
// Browser globals
|
10
|
+
factory(jQuery);
|
11
|
+
}
|
12
|
+
}(function ($) {
|
13
|
+
|
14
|
+
var ua = navigator.userAgent,
|
15
|
+
iPhone = /iphone/i.test(ua),
|
16
|
+
chrome = /chrome/i.test(ua),
|
17
|
+
android = /android/i.test(ua),
|
18
|
+
caretTimeoutId;
|
19
|
+
|
20
|
+
$.mask = {
|
21
|
+
//Predefined character definitions
|
22
|
+
definitions: {
|
23
|
+
'9': "[0-9]",
|
24
|
+
'a': "[A-Za-z]",
|
25
|
+
'*': "[A-Za-z0-9]"
|
26
|
+
},
|
27
|
+
autoclear: true,
|
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") || this.get(0) !== document.activeElement) {
|
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
|
+
lastRequiredNonMaskPos,
|
76
|
+
len,
|
77
|
+
oldVal;
|
78
|
+
|
79
|
+
if (!mask && this.length > 0) {
|
80
|
+
input = $(this[0]);
|
81
|
+
var fn = input.data($.mask.dataName)
|
82
|
+
return fn?fn():undefined;
|
83
|
+
}
|
84
|
+
|
85
|
+
settings = $.extend({
|
86
|
+
autoclear: $.mask.autoclear,
|
87
|
+
placeholder: $.mask.placeholder, // Load default placeholder
|
88
|
+
completed: null
|
89
|
+
}, settings);
|
90
|
+
|
91
|
+
|
92
|
+
defs = $.mask.definitions;
|
93
|
+
tests = [];
|
94
|
+
partialPosition = len = mask.length;
|
95
|
+
firstNonMaskPos = null;
|
96
|
+
|
97
|
+
mask = String(mask);
|
98
|
+
|
99
|
+
$.each(mask.split(""), function(i, c) {
|
100
|
+
if (c == '?') {
|
101
|
+
len--;
|
102
|
+
partialPosition = i;
|
103
|
+
} else if (defs[c]) {
|
104
|
+
tests.push(new RegExp(defs[c]));
|
105
|
+
if (firstNonMaskPos === null) {
|
106
|
+
firstNonMaskPos = tests.length - 1;
|
107
|
+
}
|
108
|
+
if(i < partialPosition){
|
109
|
+
lastRequiredNonMaskPos = tests.length - 1;
|
110
|
+
}
|
111
|
+
} else {
|
112
|
+
tests.push(null);
|
113
|
+
}
|
114
|
+
});
|
115
|
+
|
116
|
+
return this.trigger("unmask").each(function() {
|
117
|
+
var input = $(this),
|
118
|
+
buffer = $.map(
|
119
|
+
mask.split(""),
|
120
|
+
function(c, i) {
|
121
|
+
if (c != '?') {
|
122
|
+
return defs[c] ? getPlaceholder(i) : c;
|
123
|
+
}
|
124
|
+
}),
|
125
|
+
defaultBuffer = buffer.join(''),
|
126
|
+
focusText = input.val();
|
127
|
+
|
128
|
+
function tryFireCompleted(){
|
129
|
+
if (!settings.completed) {
|
130
|
+
return;
|
131
|
+
}
|
132
|
+
|
133
|
+
for (var i = firstNonMaskPos; i <= lastRequiredNonMaskPos; i++) {
|
134
|
+
if (tests[i] && buffer[i] === getPlaceholder(i)) {
|
135
|
+
return;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
settings.completed.call(input);
|
139
|
+
}
|
140
|
+
|
141
|
+
function getPlaceholder(i){
|
142
|
+
if(i < settings.placeholder.length)
|
143
|
+
return settings.placeholder.charAt(i);
|
144
|
+
return settings.placeholder.charAt(0);
|
145
|
+
}
|
146
|
+
|
147
|
+
function seekNext(pos) {
|
148
|
+
while (++pos < len && !tests[pos]);
|
149
|
+
return pos;
|
150
|
+
}
|
151
|
+
|
152
|
+
function seekPrev(pos) {
|
153
|
+
while (--pos >= 0 && !tests[pos]);
|
154
|
+
return pos;
|
155
|
+
}
|
156
|
+
|
157
|
+
function shiftL(begin,end) {
|
158
|
+
var i,
|
159
|
+
j;
|
160
|
+
|
161
|
+
if (begin<0) {
|
162
|
+
return;
|
163
|
+
}
|
164
|
+
|
165
|
+
for (i = begin, j = seekNext(end); i < len; i++) {
|
166
|
+
if (tests[i]) {
|
167
|
+
if (j < len && tests[i].test(buffer[j])) {
|
168
|
+
buffer[i] = buffer[j];
|
169
|
+
buffer[j] = getPlaceholder(j);
|
170
|
+
} else {
|
171
|
+
break;
|
172
|
+
}
|
173
|
+
|
174
|
+
j = seekNext(j);
|
175
|
+
}
|
176
|
+
}
|
177
|
+
writeBuffer();
|
178
|
+
input.caret(Math.max(firstNonMaskPos, begin));
|
179
|
+
}
|
180
|
+
|
181
|
+
function shiftR(pos) {
|
182
|
+
var i,
|
183
|
+
c,
|
184
|
+
j,
|
185
|
+
t;
|
186
|
+
|
187
|
+
for (i = pos, c = getPlaceholder(pos); i < len; i++) {
|
188
|
+
if (tests[i]) {
|
189
|
+
j = seekNext(i);
|
190
|
+
t = buffer[i];
|
191
|
+
buffer[i] = c;
|
192
|
+
if (j < len && tests[j].test(t)) {
|
193
|
+
c = t;
|
194
|
+
} else {
|
195
|
+
break;
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
}
|
200
|
+
|
201
|
+
function androidInputEvent(e) {
|
202
|
+
var curVal = input.val();
|
203
|
+
var pos = input.caret();
|
204
|
+
|
205
|
+
var proxy = function () {
|
206
|
+
$.proxy($.fn.caret, input, pos.begin, pos.begin)();
|
207
|
+
};
|
208
|
+
|
209
|
+
if (oldVal && oldVal.length && oldVal.length > curVal.length ) {
|
210
|
+
// a deletion or backspace happened
|
211
|
+
checkVal(true);
|
212
|
+
while (pos.begin > 0 && !tests[pos.begin-1])
|
213
|
+
pos.begin--;
|
214
|
+
if (pos.begin === 0)
|
215
|
+
{
|
216
|
+
while (pos.begin < firstNonMaskPos && !tests[pos.begin])
|
217
|
+
pos.begin++;
|
218
|
+
}
|
219
|
+
setTimeout(proxy, 0);
|
220
|
+
} else {
|
221
|
+
var pos2 = checkVal(true);
|
222
|
+
var lastEnteredValue = curVal.charAt(pos.begin);
|
223
|
+
if (pos.begin < len){
|
224
|
+
if(!tests[pos.begin]){
|
225
|
+
pos.begin++;
|
226
|
+
if(tests[pos.begin].test(lastEnteredValue)){
|
227
|
+
pos.begin++;
|
228
|
+
}
|
229
|
+
}else{
|
230
|
+
if(tests[pos.begin].test(lastEnteredValue)){
|
231
|
+
pos.begin++;
|
232
|
+
}
|
233
|
+
}
|
234
|
+
}
|
235
|
+
setTimeout(proxy, 0);
|
236
|
+
}
|
237
|
+
tryFireCompleted();
|
238
|
+
}
|
239
|
+
|
240
|
+
|
241
|
+
function blurEvent(e) {
|
242
|
+
checkVal();
|
243
|
+
|
244
|
+
if (input.val() != focusText)
|
245
|
+
input.change();
|
246
|
+
}
|
247
|
+
|
248
|
+
function keydownEvent(e) {
|
249
|
+
if (input.prop("readonly")){
|
250
|
+
return;
|
251
|
+
}
|
252
|
+
|
253
|
+
var k = e.which || e.keyCode,
|
254
|
+
pos,
|
255
|
+
begin,
|
256
|
+
end;
|
257
|
+
oldVal = input.val();
|
258
|
+
//backspace, delete, and escape get special treatment
|
259
|
+
if (k === 8 || k === 46 || (iPhone && k === 127)) {
|
260
|
+
pos = input.caret();
|
261
|
+
begin = pos.begin;
|
262
|
+
end = pos.end;
|
263
|
+
|
264
|
+
if (end - begin === 0) {
|
265
|
+
begin=k!==46?seekPrev(begin):(end=seekNext(begin-1));
|
266
|
+
end=k===46?seekNext(end):end;
|
267
|
+
}
|
268
|
+
clearBuffer(begin, end);
|
269
|
+
shiftL(begin, end - 1);
|
270
|
+
|
271
|
+
e.preventDefault();
|
272
|
+
} else if( k === 13 ) { // enter
|
273
|
+
blurEvent.call(this, e);
|
274
|
+
} else if (k === 27) { // escape
|
275
|
+
input.val(focusText);
|
276
|
+
input.caret(0, checkVal());
|
277
|
+
e.preventDefault();
|
278
|
+
}
|
279
|
+
}
|
280
|
+
|
281
|
+
function keypressEvent(e) {
|
282
|
+
if (input.prop("readonly")){
|
283
|
+
return;
|
284
|
+
}
|
285
|
+
|
286
|
+
var k = e.which || e.keyCode,
|
287
|
+
pos = input.caret(),
|
288
|
+
p,
|
289
|
+
c,
|
290
|
+
next;
|
291
|
+
|
292
|
+
if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore
|
293
|
+
return;
|
294
|
+
} else if ( k && k !== 13 ) {
|
295
|
+
if (pos.end - pos.begin !== 0){
|
296
|
+
clearBuffer(pos.begin, pos.end);
|
297
|
+
shiftL(pos.begin, pos.end-1);
|
298
|
+
}
|
299
|
+
|
300
|
+
p = seekNext(pos.begin - 1);
|
301
|
+
if (p < len) {
|
302
|
+
c = String.fromCharCode(k);
|
303
|
+
if (tests[p].test(c)) {
|
304
|
+
shiftR(p);
|
305
|
+
|
306
|
+
buffer[p] = c;
|
307
|
+
writeBuffer();
|
308
|
+
next = seekNext(p);
|
309
|
+
|
310
|
+
if(android){
|
311
|
+
//Path for CSP Violation on FireFox OS 1.1
|
312
|
+
var proxy = function() {
|
313
|
+
$.proxy($.fn.caret,input,next)();
|
314
|
+
};
|
315
|
+
|
316
|
+
setTimeout(proxy,0);
|
317
|
+
}else{
|
318
|
+
input.caret(next);
|
319
|
+
}
|
320
|
+
if(pos.begin <= lastRequiredNonMaskPos){
|
321
|
+
tryFireCompleted();
|
322
|
+
}
|
323
|
+
}
|
324
|
+
}
|
325
|
+
e.preventDefault();
|
326
|
+
}
|
327
|
+
}
|
328
|
+
|
329
|
+
function clearBuffer(start, end) {
|
330
|
+
var i;
|
331
|
+
for (i = start; i < end && i < len; i++) {
|
332
|
+
if (tests[i]) {
|
333
|
+
buffer[i] = getPlaceholder(i);
|
334
|
+
}
|
335
|
+
}
|
336
|
+
}
|
337
|
+
|
338
|
+
function writeBuffer() { input.val(buffer.join('')); }
|
339
|
+
|
340
|
+
function checkVal(allow) {
|
341
|
+
//try to place characters where they belong
|
342
|
+
var test = input.val(),
|
343
|
+
lastMatch = -1,
|
344
|
+
i,
|
345
|
+
c,
|
346
|
+
pos;
|
347
|
+
|
348
|
+
for (i = 0, pos = 0; i < len; i++) {
|
349
|
+
if (tests[i]) {
|
350
|
+
buffer[i] = getPlaceholder(i);
|
351
|
+
while (pos++ < test.length) {
|
352
|
+
c = test.charAt(pos - 1);
|
353
|
+
if (tests[i].test(c)) {
|
354
|
+
buffer[i] = c;
|
355
|
+
lastMatch = i;
|
356
|
+
break;
|
357
|
+
}
|
358
|
+
}
|
359
|
+
if (pos > test.length) {
|
360
|
+
clearBuffer(i + 1, len);
|
361
|
+
break;
|
362
|
+
}
|
363
|
+
} else {
|
364
|
+
if (buffer[i] === test.charAt(pos)) {
|
365
|
+
pos++;
|
366
|
+
}
|
367
|
+
if( i < partialPosition){
|
368
|
+
lastMatch = i;
|
369
|
+
}
|
370
|
+
}
|
371
|
+
}
|
372
|
+
if (allow) {
|
373
|
+
writeBuffer();
|
374
|
+
} else if (lastMatch + 1 < partialPosition) {
|
375
|
+
if (settings.autoclear || buffer.join('') === defaultBuffer) {
|
376
|
+
// Invalid value. Remove it and replace it with the
|
377
|
+
// mask, which is the default behavior.
|
378
|
+
if(input.val()) input.val("");
|
379
|
+
clearBuffer(0, len);
|
380
|
+
} else {
|
381
|
+
// Invalid value, but we opt to show the value to the
|
382
|
+
// user and allow them to correct their mistake.
|
383
|
+
writeBuffer();
|
384
|
+
}
|
385
|
+
} else {
|
386
|
+
writeBuffer();
|
387
|
+
input.val(input.val().substring(0, lastMatch + 1));
|
388
|
+
}
|
389
|
+
return (partialPosition ? i : firstNonMaskPos);
|
390
|
+
}
|
391
|
+
|
392
|
+
input.data($.mask.dataName,function(){
|
393
|
+
return $.map(buffer, function(c, i) {
|
394
|
+
return tests[i]&&c!=getPlaceholder(i) ? c : null;
|
395
|
+
}).join('');
|
396
|
+
});
|
397
|
+
|
398
|
+
|
399
|
+
input
|
400
|
+
.one("unmask", function() {
|
401
|
+
input
|
402
|
+
.off(".mask")
|
403
|
+
.removeData($.mask.dataName);
|
404
|
+
})
|
405
|
+
.on("focus.mask", function() {
|
406
|
+
if (input.prop("readonly")){
|
407
|
+
return;
|
408
|
+
}
|
409
|
+
|
410
|
+
clearTimeout(caretTimeoutId);
|
411
|
+
var pos;
|
412
|
+
|
413
|
+
focusText = input.val();
|
414
|
+
|
415
|
+
pos = checkVal();
|
416
|
+
|
417
|
+
caretTimeoutId = setTimeout(function(){
|
418
|
+
if(input.get(0) !== document.activeElement){
|
419
|
+
return;
|
420
|
+
}
|
421
|
+
writeBuffer();
|
422
|
+
if (pos == mask.replace("?","").length) {
|
423
|
+
input.caret(0, pos);
|
424
|
+
} else {
|
425
|
+
input.caret(pos);
|
426
|
+
}
|
427
|
+
}, 10);
|
428
|
+
})
|
429
|
+
.on("blur.mask", blurEvent)
|
430
|
+
.on("keydown.mask", keydownEvent)
|
431
|
+
.on("keypress.mask", keypressEvent)
|
432
|
+
.on("input.mask paste.mask", function() {
|
433
|
+
if (input.prop("readonly")){
|
434
|
+
return;
|
435
|
+
}
|
436
|
+
|
437
|
+
setTimeout(function() {
|
438
|
+
var pos=checkVal(true);
|
439
|
+
input.caret(pos);
|
440
|
+
tryFireCompleted();
|
441
|
+
}, 0);
|
442
|
+
});
|
443
|
+
if (chrome && android)
|
444
|
+
{
|
445
|
+
input
|
446
|
+
.off('input.mask')
|
447
|
+
.on('input.mask', androidInputEvent);
|
448
|
+
}
|
449
|
+
checkVal(); //Perform initial check for existing values
|
450
|
+
});
|
451
|
+
}
|
452
|
+
});
|
453
|
+
}));
|
@@ -33,7 +33,7 @@
|
|
33
33
|
|
34
34
|
<div class="form-group clearfix">
|
35
35
|
<%= f.label :phone, settings.form_label_phone, class: 'control-label must' %>
|
36
|
-
<%= f.text_field :phone, class: 'form-control' %>
|
36
|
+
<%= f.text_field :phone, class: 'form-control', type: 'tel' %>
|
37
37
|
<span class="help-block col-md-12"></span>
|
38
38
|
</div>
|
39
39
|
|
data/lib/c80_contest/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: c80_contest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- C80609A
|
@@ -265,6 +265,7 @@ files:
|
|
265
265
|
- app/assets/javascripts/lib/fileinput/themes/gly/theme.js
|
266
266
|
- app/assets/javascripts/lib/jqx/jqxcore.js
|
267
267
|
- app/assets/javascripts/lib/jqx/jqxmaskedinput.js
|
268
|
+
- app/assets/javascripts/lib/masked_input/jquery.maskedinput.js
|
268
269
|
- app/assets/javascripts/lib/numbered/numbered.js
|
269
270
|
- app/assets/stylesheets/c80_contest.scss
|
270
271
|
- app/assets/stylesheets/c80_contest/backend/bid_page.scss
|