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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8589be081b886f52a64155f93fd213212bdb464
4
- data.tar.gz: 0f520526b5c616e128d99cebad12fe29176d629e
3
+ metadata.gz: 1bffc4588cf22bb6aca523694a936ccc9fdc350d
4
+ data.tar.gz: 82f92265d25042fdccef7a1bb94229bd4174b1f6
5
5
  SHA512:
6
- metadata.gz: 54652353065ecc637623af8f306769d15392ee352461f3843a146c937ed52a80cdcb69f35dd0528db276701465bfffa98c5d55357c6edbd58027cd5ed8d32ea9
7
- data.tar.gz: ac0b82549ed7284a26b7fe29c851614ef0d7a7beca11ac8ec56ae51ec9298389440332dc76593dfe19c65cee292659f31fb6c5ca6c8d0f42e28b8744ea8d31f1
6
+ metadata.gz: 517885840fe6599b9aaacbcbd24a5e24f3f0b2c6bfdd077bf9111f637ef43c95e5fc5ac992ddb502d81631af080caf0034c408cd06bee2416f83ee53ae17245d
7
+ data.tar.gz: 3daedefbdc507583b9f1b0616f27c1a122bfc10e232d406169976c52bd7df3c0c166cd10664dea35ec849379948f3a7eea3f34ba5bc3d28236b3268352b83eeb
@@ -1,4 +1,5 @@
1
1
  #= require_directory ./lib/fileinput
2
2
  # require_directory ./lib/jqx
3
- #= require_directory ./lib/numbered
3
+ # require_directory ./lib/numbered
4
+ #= require_directory ./lib/masked_input
4
5
  #= require c80_contest/frontend/ajax_bid_form
@@ -110,11 +110,13 @@ $(function () {
110
110
  // mask: '+# (###) ###-##-##'
111
111
  // });
112
112
 
113
- var numberedFromClass = new Numbered('form#form_bid input#bid_phone', {
114
- mask: '+# (###) ###-##-##',
115
- empty: '_',
116
- placeholder: true
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
 
@@ -1,3 +1,3 @@
1
1
  module C80Contest
2
- VERSION = '0.1.7'
2
+ VERSION = '0.1.8'
3
3
  end
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.7
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