formagic 0.1.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.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/CONTRIBUTING.md +24 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE.md +21 -0
  6. data/README.md +29 -0
  7. data/Rakefile +1 -0
  8. data/app/assets/images/datedropper/done.png +0 -0
  9. data/app/assets/images/datedropper/done.svg +1 -0
  10. data/app/assets/images/datedropper/next.png +0 -0
  11. data/app/assets/images/datedropper/next.svg +1 -0
  12. data/app/assets/images/datedropper/prev.png +0 -0
  13. data/app/assets/images/datedropper/prev.svg +1 -0
  14. data/app/assets/javascripts/formagic/form.coffee +229 -0
  15. data/app/assets/javascripts/formagic/group.coffee +28 -0
  16. data/app/assets/javascripts/formagic/inputs/checkbox.coffee +83 -0
  17. data/app/assets/javascripts/formagic/inputs/color.coffee +55 -0
  18. data/app/assets/javascripts/formagic/inputs/date.coffee +69 -0
  19. data/app/assets/javascripts/formagic/inputs/datetime.coffee +130 -0
  20. data/app/assets/javascripts/formagic/inputs/document.coffee +0 -0
  21. data/app/assets/javascripts/formagic/inputs/documents.coffee +173 -0
  22. data/app/assets/javascripts/formagic/inputs/documents_reorder.coffee +67 -0
  23. data/app/assets/javascripts/formagic/inputs/file.coffee +114 -0
  24. data/app/assets/javascripts/formagic/inputs/hidden.coffee +57 -0
  25. data/app/assets/javascripts/formagic/inputs/html.coffee +81 -0
  26. data/app/assets/javascripts/formagic/inputs/image.coffee +28 -0
  27. data/app/assets/javascripts/formagic/inputs/list.coffee +154 -0
  28. data/app/assets/javascripts/formagic/inputs/list_reorder.coffee +39 -0
  29. data/app/assets/javascripts/formagic/inputs/list_typeahead.coffee +55 -0
  30. data/app/assets/javascripts/formagic/inputs/markdown.coffee +93 -0
  31. data/app/assets/javascripts/formagic/inputs/password.coffee +32 -0
  32. data/app/assets/javascripts/formagic/inputs/redactor.coffee +53 -0
  33. data/app/assets/javascripts/formagic/inputs/redactor_character.coffee +75 -0
  34. data/app/assets/javascripts/formagic/inputs/redactor_images.coffee +166 -0
  35. data/app/assets/javascripts/formagic/inputs/select.coffee +84 -0
  36. data/app/assets/javascripts/formagic/inputs/select2.coffee +33 -0
  37. data/app/assets/javascripts/formagic/inputs/string.coffee +160 -0
  38. data/app/assets/javascripts/formagic/inputs/text.coffee +43 -0
  39. data/app/assets/javascripts/formagic/inputs/time.coffee +0 -0
  40. data/app/assets/javascripts/formagic.coffee +22 -0
  41. data/app/assets/javascripts/vendor/ace.js +18280 -0
  42. data/app/assets/javascripts/vendor/datedropper.js +1005 -0
  43. data/app/assets/javascripts/vendor/jquery.scrollparent.js +14 -0
  44. data/app/assets/javascripts/vendor/jquery.textarea_autosize.js +55 -0
  45. data/app/assets/javascripts/vendor/jquery.typeahead.js +1782 -0
  46. data/app/assets/javascripts/vendor/marked.js +1272 -0
  47. data/app/assets/javascripts/vendor/mode-html.js +2436 -0
  48. data/app/assets/javascripts/vendor/mode-markdown.js +2820 -0
  49. data/app/assets/javascripts/vendor/moment.js +3083 -0
  50. data/app/assets/javascripts/vendor/redactor.fixedtoolbar.js +107 -0
  51. data/app/assets/javascripts/vendor/select2.js +5274 -0
  52. data/app/assets/stylesheets/formagic/checkbox.scss +8 -0
  53. data/app/assets/stylesheets/formagic/color.scss +12 -0
  54. data/app/assets/stylesheets/formagic/date.scss +37 -0
  55. data/app/assets/stylesheets/formagic/file.scss +29 -0
  56. data/app/assets/stylesheets/formagic/form.scss +36 -0
  57. data/app/assets/stylesheets/formagic/group.scss +22 -0
  58. data/app/assets/stylesheets/formagic/image.scss +19 -0
  59. data/app/assets/stylesheets/formagic/list.scss +39 -0
  60. data/app/assets/stylesheets/formagic/nested-form.scss +23 -0
  61. data/app/assets/stylesheets/formagic/redactor.scss +41 -0
  62. data/app/assets/stylesheets/formagic/select.scss +5 -0
  63. data/app/assets/stylesheets/formagic/select2.scss +95 -0
  64. data/app/assets/stylesheets/formagic/string.scss +14 -0
  65. data/app/assets/stylesheets/formagic/switch.scss +86 -0
  66. data/app/assets/stylesheets/formagic/text.scss +9 -0
  67. data/app/assets/stylesheets/formagic.scss +15 -0
  68. data/app/assets/stylesheets/vendor/datedropper.scss +523 -0
  69. data/app/assets/stylesheets/vendor/select2.scss +258 -0
  70. data/formagic.gemspec +30 -0
  71. data/lib/formagic/engine.rb +5 -0
  72. data/lib/formagic/version.rb +3 -0
  73. data/lib/formagic.rb +5 -0
  74. metadata +146 -0
@@ -0,0 +1,1005 @@
1
+
2
+
3
+ //////////////////////////////////////
4
+ // DATEDROPPER Version 1.2 //
5
+ // Last Updates: 27/03/2015 //
6
+ // //
7
+ // Made with love by //
8
+ // Felice Gattuso //
9
+ //////////////////////////////////////
10
+
11
+
12
+ (function ( $ ) {
13
+ $.fn.dateDropper = function( options ) {
14
+ return $(this).each(function() {
15
+
16
+ // IF IS INPUT AND TYPE IS TEXT //
17
+
18
+ if( $(this).is('input') && $(this).attr('type') == "text" ) {
19
+
20
+ // DECLARE CURRENT VARIABLE //
21
+
22
+ var
23
+ dd_y_current = new Date().getFullYear(),
24
+ dd_d_current = new Date().getDate(),
25
+ dd_m_current = new Date().getMonth(),
26
+
27
+ // SET OPTIONS //
28
+
29
+ settings = $.extend({
30
+
31
+ animate_current : true,
32
+ animation : "fadein",
33
+ format : "m/d/Y",
34
+ lang : "en",
35
+ lock : false,
36
+ maxYear : dd_y_current,
37
+ minYear : 1970,
38
+ placeholder : false,
39
+ years_multiple : 10,
40
+
41
+ //style
42
+ color : "#f87a54",
43
+ textColor : "#000000",
44
+ bgColor : "#FFFFFF",
45
+ borderColor : "#000000",
46
+ borderRadius : 8,
47
+ boxShadow : "0 0px 0px 6px rgba(0,0,0,0.05)",
48
+
49
+ }, options ),
50
+
51
+ // DECLARE VARIABLE //
52
+
53
+ dd_input = $(this),
54
+ drop_length = $('.dd_wrap').length + 1,
55
+ bissextile = function(yr) {return !((yr % 4) || (!(yr % 100) && (yr % 400)));}, //bissextile year
56
+ range = 100,
57
+ isHex = /^#[0-9A-F]{6}$/i.test(settings.color),
58
+ ymultiselect = 0;
59
+
60
+ if(!isHex) settings.color = '#f87a54';
61
+ if(settings.maxYear<dd_y_current) dd_y_current = settings.maxYear;
62
+
63
+ var
64
+ yranger = function(yr) {
65
+ for ( var yy = settings.minYear; yy <= settings.maxYear ; yy++ ) {
66
+
67
+ var remainder = yy % settings.years_multiple;
68
+ if (remainder == 0)
69
+ if(yr>=yy&&yr<(yy+settings.years_multiple)||yr < yy) {
70
+ ymultiselect = yy;
71
+ return yy;
72
+ }
73
+
74
+ }
75
+ };
76
+
77
+ // SWITCH LANGUAGES //
78
+
79
+ switch(settings.lang) {
80
+ //Arabic
81
+ case 'ar':
82
+ var monthNames = [
83
+ "جانفي",
84
+ "فيفري",
85
+ "مارس",
86
+ "أفريل",
87
+ "ماي",
88
+ "جوان",
89
+ "جويلية",
90
+ "أوت",
91
+ "سبتمبر",
92
+ "أكتوبر",
93
+ "نوفمبر",
94
+ "ديسمبر"
95
+ ];
96
+ var dayNames = [
97
+ 'الأحد',
98
+ 'الإثنين',
99
+ 'الثلثاء',
100
+ 'الأربعاء',
101
+ 'الخميس',
102
+ 'الجمعة',
103
+ 'السبت'
104
+ ];
105
+ break;
106
+ //italian
107
+ case 'it':
108
+ var monthNames = [
109
+ "Gennaio",
110
+ "Febbraio",
111
+ "Marzo",
112
+ "Aprile",
113
+ "Maggio",
114
+ "Giugno",
115
+ "Luglio",
116
+ "Agosto",
117
+ "Settembre",
118
+ "Ottobre",
119
+ "Novembre",
120
+ "Dicembre"
121
+ ];
122
+ var dayNames = [
123
+ 'Domenica',
124
+ 'Lunedì',
125
+ 'Martedì',
126
+ 'Mercoledì',
127
+ 'Giovedì',
128
+ 'Venerdì',
129
+ 'Sabato'
130
+ ];
131
+ break;
132
+ //hungarian
133
+ case 'hu':
134
+ var monthNames = [
135
+ "január",
136
+ "február",
137
+ "március",
138
+ "április",
139
+ "május",
140
+ "június",
141
+ "július",
142
+ "augusztus",
143
+ "szeptember",
144
+ "október",
145
+ "november",
146
+ "december"
147
+ ];
148
+ var dayNames = [
149
+ 'vasárnap',
150
+ 'hétfő',
151
+ 'kedd',
152
+ 'szerda',
153
+ 'csütörtök',
154
+ 'péntek',
155
+ 'szombat'
156
+ ];
157
+ break;
158
+ //greek
159
+ case 'gr':
160
+ var monthNames = [
161
+ "Ιανουάριος",
162
+ "Φεβρουάριος",
163
+ "Μάρτιος",
164
+ "Απρίλιος",
165
+ "Μάιος",
166
+ "Ιούνιος",
167
+ "Ιούλιος",
168
+ "Αύγουστος",
169
+ "Σεπτέμβριος",
170
+ "Οκτώβριος",
171
+ "Νοέμβριος",
172
+ "Δεκέμβριος"
173
+ ];
174
+ var dayNames = [
175
+ 'Κυριακή',
176
+ 'Δευτέρα',
177
+ 'Τρίτη',
178
+ 'Τετάρτη',
179
+ 'Πέμπτη',
180
+ 'Παρασκευή',
181
+ 'Σάββατο'
182
+ ];
183
+ break;
184
+ //espanol
185
+ case 'es':
186
+ var monthNames = [
187
+ "Enero",
188
+ "Febrero",
189
+ "Marzo",
190
+ "Abril",
191
+ "Mayo",
192
+ "Junio",
193
+ "Julio",
194
+ "Agosto",
195
+ "Septiembre",
196
+ "Octubre",
197
+ "Noviembre",
198
+ "Diciembre"
199
+ ];
200
+ var dayNames = [
201
+ 'Domingo',
202
+ 'Lunes',
203
+ 'Martes',
204
+ 'Miércoles',
205
+ 'Jueves',
206
+ 'Viernes',
207
+ 'Sábado'
208
+ ];
209
+ break;
210
+ //dansk
211
+ case 'da':
212
+ var monthNames = [
213
+ "januar",
214
+ "februar",
215
+ "marts",
216
+ "april",
217
+ "maj",
218
+ "juni",
219
+ "juli",
220
+ "august",
221
+ "september",
222
+ "oktober",
223
+ "november",
224
+ "december"
225
+ ];
226
+ var dayNames = [
227
+ 'søndag',
228
+ 'mandag',
229
+ 'tirsdag',
230
+ 'onsdag',
231
+ 'torsdag',
232
+ 'fredag',
233
+ 'lørdag'
234
+ ];
235
+ break;
236
+ //deustche
237
+ case 'de':
238
+ var monthNames = [
239
+ "Januar",
240
+ "Februar",
241
+ "Marz",
242
+ "April",
243
+ "Mai",
244
+ "Juni",
245
+ "Juli",
246
+ "August",
247
+ "September",
248
+ "Oktober",
249
+ "November",
250
+ "Dezember"
251
+ ];
252
+ var dayNames = [
253
+ 'Sonntag',
254
+ 'Montag',
255
+ 'Dienstag',
256
+ 'Mittwoch',
257
+ 'Donnerstag',
258
+ 'Freitag',
259
+ 'Samstag'
260
+ ];
261
+ break;
262
+ //dutch
263
+ case 'nl':
264
+ var monthNames = [
265
+ "januari",
266
+ "februari",
267
+ "maart",
268
+ "april",
269
+ "mei",
270
+ "juni",
271
+ "juli",
272
+ "augustus",
273
+ "september",
274
+ "oktober",
275
+ "november",
276
+ "december"
277
+ ];
278
+ var dayNames = [
279
+ 'zondag',
280
+ 'maandag',
281
+ 'dinsdag',
282
+ 'woensdag',
283
+ 'donderdag',
284
+ 'vrijdag',
285
+ 'zaterdag'
286
+ ];
287
+ break;
288
+ //francais
289
+ case 'fr':
290
+ var monthNames = [
291
+ "Janvier",
292
+ "Février",
293
+ "Mars",
294
+ "Avril",
295
+ "Mai",
296
+ "Juin",
297
+ "Juillet",
298
+ "Août",
299
+ "Septembre",
300
+ "Octobre",
301
+ "Novembre",
302
+ "Décembre"
303
+ ];
304
+ var dayNames = [
305
+ 'Dimanche',
306
+ 'Lundi',
307
+ 'Mardi',
308
+ 'Mercredi',
309
+ 'Jeudi',
310
+ 'Vendredi',
311
+ 'Samedi'
312
+ ];
313
+ break;
314
+ //polski
315
+ case 'pl':
316
+ var monthNames = [
317
+ "styczeń",
318
+ "luty",
319
+ "marzec",
320
+ "kwiecień",
321
+ "maj",
322
+ "czerwiec",
323
+ "lipiec",
324
+ "sierpień",
325
+ "wrzesień",
326
+ "październik",
327
+ "listopad",
328
+ "grudzień"
329
+ ];
330
+ var dayNames = [
331
+ 'niedziela',
332
+ 'poniedziałek',
333
+ 'wtorek',
334
+ 'środa',
335
+ 'czwartek',
336
+ 'piątek',
337
+ 'sobota'
338
+ ];
339
+ break;
340
+ //portuguese
341
+ case 'pt':
342
+ var monthNames = [
343
+ "Janeiro",
344
+ "Fevereiro",
345
+ "Março",
346
+ "Abril",
347
+ "Maio",
348
+ "Junho",
349
+ "Julho",
350
+ "Agosto",
351
+ "Setembro",
352
+ "Outubro",
353
+ "Novembro",
354
+ "Dezembro"
355
+ ];
356
+ var dayNames = [
357
+ "Domingo",
358
+ "Segunda",
359
+ "Terça",
360
+ "Quarta",
361
+ "Quinta",
362
+ "Sexta",
363
+ "Sábado"
364
+ ];
365
+ break;
366
+ //slovenian
367
+ case 'si':
368
+ var monthNames = [
369
+ "januar",
370
+ "februar",
371
+ "marec",
372
+ "april",
373
+ "maj",
374
+ "junij",
375
+ "julij",
376
+ "avgust",
377
+ "september",
378
+ "oktober",
379
+ "november",
380
+ "december"
381
+ ];
382
+ var dayNames = [
383
+ 'nedelja',
384
+ 'ponedeljek',
385
+ 'torek',
386
+ 'sreda',
387
+ 'četrtek',
388
+ 'petek',
389
+ 'sobota'
390
+ ];
391
+ break;
392
+ //ukrainian
393
+ case 'uk':
394
+ var monthNames = [
395
+ "січень",
396
+ "лютий",
397
+ "березень",
398
+ "квітень",
399
+ "травень",
400
+ "червень",
401
+ "липень",
402
+ "серпень",
403
+ "вересень",
404
+ "жовтень",
405
+ "листопад",
406
+ "грудень"
407
+ ];
408
+ var dayNames = [
409
+ 'неділя',
410
+ 'понеділок',
411
+ 'вівторок',
412
+ 'середа',
413
+ 'четвер',
414
+ 'п\'ятниця',
415
+ 'субота'
416
+ ];
417
+ break;
418
+ //russian
419
+ case 'ru':
420
+ var monthNames = [
421
+ "январь",
422
+ "февраль",
423
+ "март",
424
+ "апрель",
425
+ "май",
426
+ "июнь",
427
+ "июль",
428
+ "август",
429
+ "сентябрь",
430
+ "октябрь",
431
+ "ноябрь",
432
+ "декабрь"
433
+ ];
434
+ var dayNames = [
435
+ 'воскресенье',
436
+ 'понедельник',
437
+ 'вторник',
438
+ 'среда',
439
+ 'четверг',
440
+ 'пятница',
441
+ 'суббота'
442
+ ];
443
+ break;
444
+ //turkish
445
+ case 'tr':
446
+ var monthNames = [
447
+ "Ocak",
448
+ "Şubat",
449
+ "Mart",
450
+ "Nisan",
451
+ "Mayıs",
452
+ "Haziran",
453
+ "Temmuz",
454
+ "Ağustos",
455
+ "Eylül",
456
+ "Ekim",
457
+ "Kasım",
458
+ "Aralık"
459
+ ];
460
+ var dayNames = [
461
+ 'Pazar',
462
+ 'Pazartesi',
463
+ 'Sali',
464
+ 'Çarşamba',
465
+ 'Perşembe',
466
+ 'Cuma',
467
+ 'Cumartesi'
468
+ ];
469
+ break;
470
+ //english
471
+ default:
472
+ var monthNames = [
473
+ "January",
474
+ "February",
475
+ "March",
476
+ "April",
477
+ "May",
478
+ "June",
479
+ "July",
480
+ "August",
481
+ "September",
482
+ "October",
483
+ "November",
484
+ "December"
485
+ ];
486
+ var dayNames = [
487
+ 'Sunday',
488
+ 'Monday',
489
+ 'Tuesday',
490
+ 'Wednesday',
491
+ 'Thursday',
492
+ 'Friday',
493
+ 'Saturday'
494
+ ];
495
+ break;
496
+ };
497
+
498
+
499
+ // CREATE WRAP //
500
+
501
+ $('<div class="dd_wrap" id="dd_'+drop_length+'"><div class="dd_overlay"></div><div class="dd_"></div></div>')
502
+ .appendTo('body');
503
+
504
+ var
505
+ dd_id = $('#dd_'+drop_length),
506
+ dd_inner = dd_id.find('.dd_');
507
+ dd_overlay = dd_id.find('.dd_overlay');
508
+
509
+ // DATEDROPPER POSITION ON RESIZE //
510
+
511
+ $(window).on('resize',function(){
512
+ dd_inner.css({
513
+ 'top':dd_input.offset().top+(dd_input.height()+12),
514
+ 'left':(dd_input.offset().left+((dd_input.outerWidth()/2)-(range/2)))-2
515
+ });
516
+ });
517
+
518
+ // SET STYLE //
519
+
520
+ $( "<style>#dd_"+drop_length+" .dd_ {border-color: "+settings.borderColor+"; background: "+settings.bgColor+"; border-radius: "+settings.borderRadius+"px; -moz-border-radius: "+settings.borderRadius+"px; -webkit-border-radius: "+settings.borderRadius+"px; color: "+settings.textColor+";box-shadow: "+settings.boxShadow+";-webkit-box-shadow: "+settings.boxShadow+";-moz-box-shadow: "+settings.boxShadow+";}#dd_"+drop_length+" .dd_ .dd_submit,#dd_"+drop_length+" .dd_ .dd_r_ ul li.dd_sltd_ { background-color: "+settings.color+"; } #dd_"+drop_length+" .dd_ .dd_d_ .dd_sl_ ul li em , #dd_"+drop_length+" .dd_ .dd_d_ .dd_sl_ ul li.dd_sunday,#dd_"+drop_length+" .dd_ .dd_all_ ul li.dd_sunday{ color: "+settings.color+"; }#dd_"+drop_length+" .dd_ .dd_all_ ul li.dd_sunday{ border-bottom: 2px solid "+settings.color+"; } #dd_"+drop_length+" .dd_ .dd_r_ ul li:hover,#dd_"+drop_length+" .dd_ .dd_r_ ul li.dd_sltd_,#dd_"+drop_length+" .dd_ .dd_r_ ul li {border-color: "+settings.color+"; } #dd_"+drop_length+" .dd_ .dd_submit {-webkit-border-bottom-right-radius: "+((settings.borderRadius)-3)+"px;-webkit-border-bottom-left-radius: "+((settings.borderRadius)-3)+"px;-moz-border-radius-bottomright: "+((settings.borderRadius)-3)+"px;-moz-border-radius-bottomleft: "+((settings.borderRadius)-3)+"px;border-bottom-right-radius: "+((settings.borderRadius)-3)+"px;border-bottom-left-radius: "+((settings.borderRadius)-3)+"px;}#dd_"+drop_length+" .dd_:after {background:"+settings.bgColor+";border-top-color:"+settings.borderColor+";border-left-color:"+settings.borderColor+";}#dd_"+drop_length+" .dd_ .dd_r_ ul li,#dd_"+drop_length+" .dd_ .dd_all_ {background:"+settings.bgColor+";}#dd_"+drop_length+" .dd_ .dd_all_{box-shadow: inset 0 -2px 0 "+settings.color+";}#dd_"+drop_length+" .dd_ .dd_r_:after{border-bottom: 2px solid "+settings.color+"}</style>" ).appendTo( "head" );
521
+
522
+ // CREATE STRUCTURE //
523
+
524
+ dd_input
525
+ .attr({
526
+ 'readonly':'readonly'
527
+ })
528
+ .addClass('dd_locked');
529
+
530
+ if(dd_input.val()) {
531
+
532
+ var
533
+ txt = dd_input.val(),
534
+ number_regex = txt.match(/(?:\d{4}|\d{1,2})/g),
535
+ format_regex = settings.format.match(/[a-zA-Z]+/g),
536
+ tempY = null,
537
+ tempD = null,
538
+ tempM = null;
539
+
540
+ if(number_regex) {
541
+
542
+ for(var i = 0; i<=number_regex.length; i++){
543
+ if(number_regex[i]){
544
+ if(number_regex[i].length==4) tempY = number_regex[i];
545
+ else if(number_regex[i].length<=2&&number_regex[i].length>0){
546
+ if(number_regex[i]<=12&&format_regex[i]=='m'||format_regex[i]=='n') tempM = number_regex[i];
547
+ else tempD = number_regex[i]
548
+ }
549
+ }
550
+ }
551
+
552
+ if(tempM<10) { if(tempM.length==2) tempM = tempM.substr(1); }
553
+ if(tempD<10) { if(tempD.length==2) tempD = tempD.substr(1); }
554
+
555
+ if(tempD==null) tempD = dd_d_current;
556
+ if(tempM==null) tempM = dd_m_current;
557
+ if(tempY==null) tempY = dd_y_current;
558
+
559
+ }
560
+ if(tempY<settings.minYear) settings.minYear = tempY;
561
+ if(tempY>settings.maxYear) settings.maxYear = tempY;
562
+
563
+ }
564
+
565
+ else {
566
+ if(settings.placeholder) dd_input.val(settings.placeholder);
567
+ }
568
+
569
+
570
+ dd_inner.append('<div class="dd_sw_ dd_m_"><a class="dd_nav_ dd_prev_"></a><a class="dd_nav_ dd_next_"></a><div class="dd_sl_"></div></div>');
571
+ dd_inner.append('<div class="dd_sw_ dd_d_"><a class="dd_nav_ dd_prev_"></a><a class="dd_nav_ dd_next_"></a><div class="dd_sl_"></div></div>');
572
+ dd_inner.append('<div class="dd_sw_ dd_y_"><a class="dd_nav_ dd_prev_"></a><a class="dd_nav_ dd_next_"></a><div class="dd_sl_"></div></div>');
573
+ dd_inner.append('<div class="dd_all_ dd_a_d_"></div>');
574
+ dd_inner.append('<div class="dd_all_ dd_a_m_"></div>');
575
+ dd_inner.append('<div class="dd_all_ dd_a_y_"></div>');
576
+ if(settings.years_multiple) dd_inner.append('<div class="dd_r_"></div>');
577
+ dd_inner.append('<div class="dd_submit"></div>');
578
+
579
+ var
580
+ dd_m = dd_inner.find('.dd_m_'),
581
+ dd_d = dd_inner.find('.dd_d_'),
582
+ dd_y = dd_inner.find('.dd_y_'),
583
+ dd_a_d = dd_inner.find('.dd_a_d_'),
584
+ dd_a_m = dd_inner.find('.dd_a_m_'),
585
+ dd_a_y = dd_inner.find('.dd_a_y_'),
586
+ dd_y_r = dd_inner.find('.dd_r_'),
587
+ dd_submit = dd_inner.find('.dd_submit');
588
+
589
+ // MONTH //
590
+
591
+ dd_m.find('.dd_sl_').append('<ul></ul>');
592
+ dd_a_m.append('<ul></ul>');
593
+
594
+ for ( var mm = 1; mm <= 12; mm++ ) {
595
+
596
+ months = (monthNames[mm-1]).substr(0, 3);
597
+ dd_m.find('ul').append('<li value="'+mm+'">'+months+'</li>');
598
+ dd_a_m.find('ul').append('<li value="'+mm+'">'+mm+'</li>')
599
+
600
+ }
601
+
602
+ // DAY //
603
+
604
+ dd_d.find('.dd_sl_').append('<ul></ul>');
605
+ dd_a_d.append('<ul></ul>');
606
+
607
+ for ( var dd = 1; dd <= 31; dd++ ) {
608
+
609
+ if(dd<10) ddd = '0'+dd; else ddd = dd;
610
+ dd_d.find('ul').append('<li value="'+dd+'">'+ddd+'<em ></em></li>');
611
+ dd_a_d.find('ul').append('<li value="'+dd+'">'+ddd+'</li>')
612
+
613
+ }
614
+
615
+ // YEAR //
616
+
617
+ dd_y.find('.dd_sl_').append('<ul></ul>');
618
+
619
+ for ( var yy = settings.minYear; yy <= settings.maxYear ; yy++ ) {
620
+
621
+ bissextile_return = bissextile(yy);
622
+ dd_y.find('ul').append('<li value="'+yy+'" data-filter="'+bissextile_return+'">'+yy+'</li>')
623
+
624
+ }
625
+
626
+ // YEARS MULTIPLE //
627
+
628
+ if(settings.years_multiple) {
629
+
630
+ dd_y_r.append('<ul></ul>');
631
+ dd_a_y.append('<ul></ul>');
632
+
633
+ for ( var yr = settings.minYear; yr <= settings.maxYear ; yr++ ) {
634
+
635
+ var remainder = yr % settings.years_multiple;
636
+ if (remainder == 0) {
637
+ dd_y_r.find('ul').append('<li value="'+yr+'"></li>');
638
+ }
639
+ }
640
+
641
+ var ww = range/dd_y_r.find('li').length;
642
+
643
+ }
644
+
645
+ // SET CURRENT DATE FUNCTIONS //
646
+
647
+ var
648
+ selectCurrent = function() {
649
+ dd_d.find('li').eq(dd_d_current-1).addClass('dd_sltd_');
650
+ dd_m.find('li').eq(dd_m_current).addClass('dd_sltd_');
651
+ dd_y.find('li[value='+dd_y_current+']').addClass('dd_sltd_');
652
+ if(settings.years_multiple) dd_y_r.find('li[value='+yranger(dd_y_current)+']').addClass('dd_sltd_');
653
+ },
654
+ setValueDate = function(){
655
+ dd_d.find('li').eq(tempD-1).addClass('dd_sltd_');
656
+ dd_m.find('li').eq(tempM-1).addClass('dd_sltd_');
657
+ dd_y.find('li[value='+tempY+']').addClass('dd_sltd_');
658
+ if(settings.years_multiple) dd_y_r.find('li[value='+yranger(tempY)+']').addClass('dd_sltd_');
659
+ },
660
+ setDateAnimate = function() {
661
+ dd_m.find('.dd_sl_').animate({scrollLeft:dd_m.find('li.dd_sltd_').index()*range},1200,'swing');
662
+ setTimeout(function(){
663
+ dd_d.find('.dd_sl_').animate({scrollLeft:dd_d.find('li.dd_sltd_').index()*range},1200,'swing');
664
+ setTimeout(function(){
665
+ dd_y.find('.dd_sl_').animate({scrollLeft:dd_y.find('li.dd_sltd_').index()*range},1200,'swing');
666
+ },200);
667
+ },400);
668
+ },
669
+ setSelectedDate = function() {
670
+ dd_m.find('.dd_sl_').scrollLeft(dd_m.find('li.dd_sltd_').index()*range);
671
+ dd_d.find('.dd_sl_').scrollLeft(dd_d.find('li.dd_sltd_').index()*range);
672
+ dd_y.find('.dd_sl_').scrollLeft(dd_y.find('li.dd_sltd_').index()*range);
673
+ }
674
+
675
+
676
+ if(!tempD&&!tempM&&!tempY) selectCurrent(); else setValueDate();
677
+
678
+ if(settings.format!='Y'&&settings.format!='m') {
679
+
680
+ dd_d.find('li').click(function(){
681
+ var
682
+ dd = dd_d.find('li.dd_sltd_').attr('value');
683
+ dd_a_d.find('li').removeClass('dd_sltd_')
684
+ dd_a_d.find('li[value='+dd+']').addClass('dd_sltd_');
685
+ dd_a_d.addClass('dd_open_');
686
+ });
687
+ dd_a_d.find('li').click(function(){
688
+ var
689
+ dd = $(this).attr('value');
690
+ dd_d.find('li[value='+dd+']').click();
691
+ dd_a_d.removeClass('dd_open_');
692
+ calc();
693
+ });
694
+ dd_m.find('li').click(function(){
695
+ var
696
+ dd = dd_m.find('li.dd_sltd_').attr('value');
697
+ dd_a_m.find('li').removeClass('dd_sltd_')
698
+ dd_a_m.find('li[value='+dd+']').addClass('dd_sltd_');
699
+ dd_a_m.addClass('dd_open_');
700
+ });
701
+ dd_a_m.find('li').click(function(){
702
+ var
703
+ dd = $(this).attr('value');
704
+ dd_m.find('li[value='+dd+']').click();
705
+ dd_a_m.removeClass('dd_open_');
706
+ calc();
707
+ });
708
+ dd_y.find('li').click(function(){
709
+ dd_a_y.find('ul').empty();
710
+ var
711
+ dd = dd_y_r.find('li.dd_sltd_').attr('value'),
712
+ dd2 = dd_y.find('li.dd_sltd_').attr('value'),
713
+ dd10 = parseInt(dd) + 9;
714
+ if(dd10>settings.maxYear) dd10=settings.maxYear;
715
+ dd_a_y.find('li').removeClass('dd_sltd_');
716
+
717
+ for ( var yr = dd; yr <= dd10 ; yr++ ) {
718
+ dd_a_y.find('ul').append('<li value="'+yr+'">'+yr+'</li>')
719
+ }
720
+ dd_a_y.find('li[value='+dd2+']').addClass('dd_sltd_');
721
+ dd_a_y.addClass('dd_open_');
722
+
723
+ dd_a_y.find('li').click(function(){
724
+ var
725
+ dd = $(this).attr('value');
726
+ dd_y.find('li[value='+dd+']').click();
727
+ dd_a_y.removeClass('dd_open_');
728
+ calc();
729
+ })
730
+ });
731
+
732
+ }
733
+
734
+
735
+ // SWITCH INTERFACE //
736
+
737
+ switch(settings.format) {
738
+ case 'Y': dd_m.hide();dd_d.hide(); break;
739
+ case 'm': dd_y.hide();dd_y_r.hide();dd_d.hide(); break;
740
+ }
741
+
742
+ // DECLARE CALC FUNCTIONS //
743
+
744
+ var
745
+ calc = function() {
746
+
747
+ var
748
+ dd = dd_d.find('li.dd_sltd_').attr('value'),
749
+ mm = dd_m.find('li.dd_sltd_').attr('value'),
750
+ YY = dd_y.find('li.dd_sltd_').attr('value'),
751
+ YR = dd_y_r.find('li.dd_sltd_'),
752
+ bis = dd_y.find('li.dd_sltd_').attr('data-filter');
753
+
754
+ dd_a_d.find('li').show();
755
+ if(bis=='true'&&mm=='2') {
756
+ dd_d.find('ul').width(29*range);
757
+ if(dd==30||dd==31) {
758
+ dd_d.find('li').removeClass('dd_sltd_')
759
+ dd_d.find('li[value=29]').addClass('dd_sltd_');
760
+ }
761
+ dd_a_d.find('li[value=30],li[value=31]').hide();
762
+ }
763
+ else if(bis!='true'&&mm=='2') {
764
+ dd_d.find('ul').width(28*range);
765
+ if(dd==29||dd==30||dd==31) {
766
+ dd_d.find('li').removeClass('dd_sltd_')
767
+ dd_d.find('li[value=28]').addClass('dd_sltd_');
768
+ }
769
+ dd_a_d.find('li[value=29],li[value=30],li[value=31]').hide();
770
+ }
771
+ else if(mm=='11'||mm=='4'||mm=='6'||mm=='9') {
772
+ dd_d.find('ul').width(30*range);
773
+ if(dd==31) {
774
+ dd_d.find('li').removeClass('dd_sltd_')
775
+ dd_d.find('li[value=30]').addClass('dd_sltd_');
776
+ }
777
+ dd_a_d.find('li[value=31]').hide();
778
+ }
779
+ else {
780
+ dd_d.find('ul').width(31*range);
781
+ }
782
+
783
+ dd_d.find('li').each(function(index, element) {
784
+
785
+ tod = $(this).attr('value');
786
+
787
+ d = new Date(mm+"/"+tod+"/"+YY);
788
+ x = d.getDay();
789
+
790
+ if(x==0) $(this).addClass('dd_sunday'); else $(this).removeClass('dd_sunday');
791
+
792
+ $(this).find('em').html(dayNames[x]);
793
+
794
+ });
795
+ dd_a_d.find('li').each(function(index, element) {
796
+
797
+ tod = $(this).attr('value');
798
+
799
+ d = new Date(mm+"/"+tod+"/"+YY);
800
+ x = d.getDay();
801
+
802
+ if(x==0) $(this).addClass('dd_sunday'); else $(this).removeClass('dd_sunday');
803
+
804
+ });
805
+
806
+ if(settings.years_multiple) {
807
+
808
+ next = YR.next('li');
809
+ prev = YR.prev('li');
810
+
811
+ if(YY>=next.attr('value')&&next.length) {
812
+ ymultiselect = next.attr('value');
813
+ dd_y_r.find('li').removeClass('dd_sltd_');
814
+ next.addClass('dd_sltd_');
815
+ }
816
+ else if(YY<ymultiselect&&prev.length) {
817
+ ymultiselect = prev.attr('value');
818
+ dd_y_r.find('li').removeClass('dd_sltd_');
819
+ prev.addClass('dd_sltd_');
820
+ }
821
+ }
822
+ },
823
+ dropperSubmit = function(str) {
824
+ dd_input.val(str).change();
825
+ dd_inner.addClass('dd_fadeout').removeClass('dd_'+settings.animation);
826
+ setTimeout(function(){dd_inner.hide().removeClass('dd_fadeout'); dd_id.hide();},300);
827
+ },
828
+ dropperAlert = function() {
829
+ dd_inner.addClass('dd_alert').removeClass('dd_'+settings.animation);
830
+ setTimeout(function(){
831
+ dd_inner.removeClass('dd_alert')
832
+ },500)
833
+ };
834
+
835
+ // YEARS MULTIPLE //
836
+
837
+ if(settings.years_multiple) {
838
+
839
+ dd_y_r.find('li').on('click',function(){
840
+
841
+ dd_y_r.find('li').removeClass('dd_sltd_');
842
+ $(this).addClass('dd_sltd_');
843
+
844
+ var x = $(this).attr('value');
845
+
846
+ ymultiselect = x;
847
+
848
+ dd_y.find('.dd_sl_').stop().animate({scrollLeft:(dd_y.find('li[value='+x+']').index())*range},600,'swing');
849
+ dd_y.find('li').removeClass('dd_sltd_');
850
+ dd_y.find('li[value='+x+']').addClass('dd_sltd_');
851
+
852
+ calc();
853
+ })
854
+
855
+ }
856
+
857
+ // DEFINE EACH DATEDROPPER SWIPER //
858
+
859
+ dd_inner.find('.dd_sw_').each(function(index, element) {
860
+
861
+ var
862
+ dd_sel = $(this).find('.dd_sl_'),
863
+ dd_nav = $(this).find('.dd_nav_'),
864
+ ls = dd_sel.find('li.dd_sltd_').index()*range,
865
+ lset = function(){
866
+ scroll_left = dd_sel.scrollLeft();
867
+ if(scroll_left>=ls+(range/2)) ls = ls+range;
868
+ if(scroll_left<=ls-(range/2)) ls = ls-range;
869
+ }
870
+
871
+ dd_sel.find('ul').width(dd_sel.find('li').length*range);
872
+
873
+ dd_sel.on('scroll mousemove',function(){
874
+ lset();
875
+ });
876
+
877
+ dd_nav.click(function(){
878
+
879
+ if($(this).hasClass('dd_next_')) obj = dd_sel.find('li.dd_sltd_').next('li');
880
+ else obj = dd_sel.find('li.dd_sltd_').prev('li');
881
+
882
+ if(obj.length) {
883
+
884
+ dd_sel.stop().animate({scrollLeft:obj.index()*range}, 200 );
885
+ dd_sel.find('li').removeClass('dd_sltd_');
886
+ obj.addClass('dd_sltd_');
887
+ calc();
888
+ }
889
+ });
890
+
891
+ dd_sel.on('touchend',function(){
892
+
893
+ dd_sel.stop().animate({scrollLeft:ls}, 200 );
894
+
895
+ var x = (ls/range);
896
+
897
+ dd_sel.find('li').removeClass('dd_sltd_');
898
+ dd_sel.find('li').eq(x).addClass('dd_sltd_');
899
+
900
+ calc();
901
+
902
+ });
903
+
904
+ dd_sel.find('li').click(function(){
905
+ dd_sel.animate({scrollLeft:($(this).index())*range}, 200);
906
+ dd_sel.find('li').removeClass('dd_sltd_');
907
+ $(this).addClass('dd_sltd_');
908
+ });
909
+
910
+ });
911
+
912
+ calc();
913
+
914
+ // INPUT CLICK TO ACTIVE DATEDROPPER //
915
+
916
+ dd_input.click(function(){
917
+
918
+ dd_id.show();
919
+ dd_inner.css({
920
+ 'top':dd_input.offset().top+(dd_input.height()+12),
921
+ 'left':(dd_input.offset().left+((dd_input.outerWidth()/2)-(range/2)))-2
922
+ }).show().addClass('dd_'+settings.animation);
923
+
924
+ if(dd_input.hasClass('dd_locked')) {
925
+
926
+ dd_input.removeClass('dd_locked');
927
+
928
+ if(settings.animate_current!=false) setDateAnimate();
929
+ else setSelectedDate();
930
+
931
+ }
932
+
933
+ else setSelectedDate();
934
+
935
+ });
936
+
937
+ // ON BLUR //
938
+
939
+ dd_overlay.click(function(){
940
+ dd_inner.addClass('dd_fadeout').removeClass('dd_'+settings.animation);
941
+ setTimeout(function(){
942
+ dd_inner.hide().removeClass('dd_fadeout');
943
+ dd_id.hide();
944
+ },300);
945
+ dd_inner.find('.dd_all_').removeClass('dd_open_');
946
+ });
947
+
948
+ // ON DATEDROPPER SUBMIT //
949
+
950
+ dd_submit.click(function(){
951
+
952
+ var
953
+ d = dd_d.find('li.dd_sltd_').attr('value'),
954
+ m = dd_m.find('li.dd_sltd_').attr('value'),
955
+ Y = dd_y.find('li.dd_sltd_').attr('value');
956
+
957
+ if(d<10) d = '0'+d;
958
+ if(m<10) m = '0'+m;
959
+
960
+ x = new Date(m+"/"+d+"/"+Y);
961
+ x = x.getDay();
962
+
963
+ //day
964
+ j = d.substr(1), // 1-31
965
+ D = dayNames[x].substr(0,3), // Sun, Mon
966
+ l = dayNames[x]; // Sunday, Monday
967
+
968
+ //month
969
+ if(m<10) n = m.substr(1); else n = m; // 1-12
970
+ M = monthNames[n-1].substr(0, 3), // Jan, Feb
971
+ F = monthNames[n-1], // January, February
972
+
973
+ str =
974
+ settings.format
975
+ .replace(/\b(Y)\b/i,Y)
976
+ .replace(/\b(m)\b/i,m)
977
+ .replace(/\b(d)\b/i,d)
978
+ .replace(/\b(D)\b/i,D)
979
+ .replace(/\b(j)\b/i,j)
980
+ .replace(/\b(l)\b/i,l)
981
+ .replace(/\b(F)\b/i,F)
982
+ .replace(/\b(M)\b/i,M)
983
+ .replace(/\b(n)\b/i,n);
984
+
985
+ if(settings.lock) {
986
+
987
+ d1d = dd_d_current; if(d1d<10) d1d = '0'+d1d;
988
+ d1m = dd_m_current+1; if(d1m<10) d1m = '0'+d1m;
989
+ d1y = dd_y_current;
990
+
991
+ var d1 = Date.parse(d1y+"-"+d1m+"-"+d1d) / 1000;
992
+ var d2 = Date.parse(Y+"-"+m+"-"+d) / 1000;
993
+
994
+ if(settings.lock=='from') { if(d2 < d1) dropperAlert(); else dropperSubmit(str); }
995
+ else { if(d2 > d1) dropperAlert(); else dropperSubmit(str); }
996
+
997
+ }
998
+
999
+ else dropperSubmit(str);
1000
+
1001
+ });
1002
+ }
1003
+ });
1004
+ };
1005
+ }( jQuery ));