pickadate-rails 1.3.0 → 1.3.1
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/README.md +1 -1
- data/lib/pickadate-rails/version.rb +1 -1
- data/vendor/assets/javascripts/pickadate/picker.date.js +80 -18
- data/vendor/assets/javascripts/pickadate/picker.js +58 -32
- data/vendor/assets/javascripts/pickadate/picker.time.js +109 -31
- data/vendor/assets/javascripts/pickadate/translations/fr_FR.js +7 -7
- data/vendor/assets/javascripts/pickadate/translations/zh_TW.js +13 -0
- data/vendor/assets/stylesheets/pickadate/classic.css +29 -13
- data/vendor/assets/stylesheets/pickadate/classic.time.css +1 -0
- data/vendor/assets/stylesheets/pickadate/default.css +8 -2
- data/vendor/assets/stylesheets/pickadate/rtl.css +29 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee040041eef6c517e68b6879b8a780c6bdedd8ac
|
4
|
+
data.tar.gz: fbc696df4935a0b63e33134e53735b186a9ff8f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83d3eee2474fdb0ec31f6c9f9b14b41d258dcd00235131c5569b26a1b2a6ba4dd18eaed2c7a9ee6a1f12308958e55d02e522f2b6bd75accedda2cd98e4cad9ee
|
7
|
+
data.tar.gz: 1666b78ee8359dcf46538f6ef0a475436dc62b166469157a8ecbd5125cd6e853b35845f2d449495c4ee671145a5fb7db48f597a07c634cb7494f7ad04acd888d
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Pickadate-Rails [](http://badge.fury.io/rb/pickadate-rails)
|
2
2
|
|
3
|
-
## Pickadate Version: 3.3.
|
3
|
+
## Pickadate Version: 3.3.1
|
4
4
|
|
5
5
|
Easily add [pickadate.js](https://github.com/amsul/pickadate.js) to your Rails 3.1+ application using the asset pipeline.
|
6
6
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
/*!
|
3
|
-
* Date picker for pickadate.js v3.3.
|
3
|
+
* Date picker for pickadate.js v3.3.1
|
4
4
|
* http://amsul.github.io/pickadate.js/date.htm
|
5
5
|
*/
|
6
6
|
|
@@ -185,7 +185,7 @@ DatePicker.prototype.create = function( type, value, options ) {
|
|
185
185
|
}
|
186
186
|
|
187
187
|
// If it’s an object, use the native date object.
|
188
|
-
else if (
|
188
|
+
else if ( $.isPlainObject( value ) && Picker._.isInteger( value.pick ) ) {
|
189
189
|
value = value.obj
|
190
190
|
}
|
191
191
|
|
@@ -235,7 +235,7 @@ DatePicker.prototype.now = function( type, value, options ) {
|
|
235
235
|
*/
|
236
236
|
DatePicker.prototype.navigate = function( type, value, options ) {
|
237
237
|
|
238
|
-
if (
|
238
|
+
if ( $.isPlainObject( value ) ) {
|
239
239
|
|
240
240
|
var targetDateObject = new Date( value.year, value.month + ( options && options.nav ? options.nav : 0 ), 1 ),
|
241
241
|
year = targetDateObject.getFullYear(),
|
@@ -307,7 +307,7 @@ DatePicker.prototype.validate = function( type, dateObject, options ) {
|
|
307
307
|
interval = options && options.interval ? options.interval : 1,
|
308
308
|
|
309
309
|
// Check if the calendar enabled dates are inverted.
|
310
|
-
|
310
|
+
isFlippedBase = calendar.item.enable === -1,
|
311
311
|
|
312
312
|
// Check if we have any enabled dates after/before now.
|
313
313
|
hasEnabledBeforeTarget, hasEnabledAfterTarget,
|
@@ -320,7 +320,7 @@ DatePicker.prototype.validate = function( type, dateObject, options ) {
|
|
320
320
|
reachedMin, reachedMax,
|
321
321
|
|
322
322
|
// Check if the calendar is inverted and at least one weekday is enabled.
|
323
|
-
hasEnabledWeekdays =
|
323
|
+
hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {
|
324
324
|
|
325
325
|
// If there’s a date, check where it is relative to the target.
|
326
326
|
if ( $.isArray( value ) ) {
|
@@ -346,15 +346,15 @@ DatePicker.prototype.validate = function( type, dateObject, options ) {
|
|
346
346
|
// • Inverted and all dates disabled.
|
347
347
|
// • ..and anything else.
|
348
348
|
if ( !options.nav ) if (
|
349
|
-
/* 1 */ ( !
|
350
|
-
/* 2 */ (
|
349
|
+
/* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||
|
350
|
+
/* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||
|
351
351
|
/* 3 */ ( dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick )
|
352
352
|
) {
|
353
353
|
|
354
354
|
|
355
355
|
// When inverted, flip the direction if there aren’t any enabled weekdays
|
356
356
|
// and there are no enabled dates in the direction of the interval.
|
357
|
-
if (
|
357
|
+
if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {
|
358
358
|
interval *= -1
|
359
359
|
}
|
360
360
|
|
@@ -407,7 +407,7 @@ DatePicker.prototype.disabled = function( dateObject ) {
|
|
407
407
|
var calendar = this,
|
408
408
|
|
409
409
|
// Filter through the disabled dates to check if this is one.
|
410
|
-
|
410
|
+
isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {
|
411
411
|
|
412
412
|
// If the date is a number, match the weekday with 0index and `firstDay` check.
|
413
413
|
if ( Picker._.isInteger( dateToDisable ) ) {
|
@@ -418,12 +418,16 @@ DatePicker.prototype.disabled = function( dateObject ) {
|
|
418
418
|
if ( $.isArray( dateToDisable ) || Picker._.isDate( dateToDisable ) ) {
|
419
419
|
return dateObject.pick === calendar.create( dateToDisable ).pick
|
420
420
|
}
|
421
|
-
})
|
421
|
+
})
|
422
422
|
|
423
|
+
// If this date matches a disabled date, confirm it’s not inverted.
|
424
|
+
isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {
|
425
|
+
return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted'
|
426
|
+
}).length
|
423
427
|
|
424
428
|
// Check the calendar “enabled” flag and respectively flip the
|
425
429
|
// disabled state. Then also check if it’s beyond the min/max limits.
|
426
|
-
return calendar.item.enable === -1 ? !
|
430
|
+
return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||
|
427
431
|
dateObject.pick < calendar.item.min.pick ||
|
428
432
|
dateObject.pick > calendar.item.max.pick
|
429
433
|
|
@@ -438,7 +442,7 @@ DatePicker.prototype.parse = function( type, value, options ) {
|
|
438
442
|
var calendar = this,
|
439
443
|
parsingObject = {}
|
440
444
|
|
441
|
-
if ( !value || Picker._.isInteger( value ) || $.isArray( value ) || Picker._.isDate( value ) ||
|
445
|
+
if ( !value || Picker._.isInteger( value ) || $.isArray( value ) || Picker._.isDate( value ) || $.isPlainObject( value ) && Picker._.isInteger( value.pick ) ) {
|
442
446
|
return value
|
443
447
|
}
|
444
448
|
|
@@ -587,11 +591,11 @@ DatePicker.prototype.flipItem = function( type, value/*, options*/ ) {
|
|
587
591
|
|
588
592
|
var calendar = this,
|
589
593
|
collection = calendar.item.disable,
|
590
|
-
|
594
|
+
isFlippedBase = calendar.item.enable === -1
|
591
595
|
|
592
596
|
// Flip the enabled and disabled dates.
|
593
597
|
if ( value == 'flip' ) {
|
594
|
-
calendar.item.enable =
|
598
|
+
calendar.item.enable = isFlippedBase ? 1 : -1
|
595
599
|
}
|
596
600
|
|
597
601
|
// Reset the collection and enable the base state.
|
@@ -610,28 +614,79 @@ DatePicker.prototype.flipItem = function( type, value/*, options*/ ) {
|
|
610
614
|
else if ( $.isArray( value ) ) {
|
611
615
|
|
612
616
|
// Check if we have to add/remove from collection.
|
613
|
-
if (
|
614
|
-
collection = calendar.removeDisabled( collection, value )
|
615
|
-
}
|
616
|
-
else if ( !isInverted && type == 'disable' || isInverted && type == 'enable' ) {
|
617
|
+
if ( isFlippedBase && type == 'enable' || !isFlippedBase && type == 'disable' ) {
|
617
618
|
collection = calendar.addDisabled( collection, value )
|
618
619
|
}
|
620
|
+
else if ( !isFlippedBase && type == 'enable' ) {
|
621
|
+
collection = calendar.addEnabled( collection, value )
|
622
|
+
}
|
623
|
+
else if ( isFlippedBase && type == 'disable' ) {
|
624
|
+
collection = calendar.removeDisabled( collection, value )
|
625
|
+
}
|
619
626
|
}
|
620
627
|
|
621
628
|
return collection
|
622
629
|
} //DatePicker.prototype.flipItem
|
623
630
|
|
624
631
|
|
632
|
+
/**
|
633
|
+
* Add an enabled (inverted) item to the disabled collection.
|
634
|
+
*/
|
635
|
+
DatePicker.prototype.addEnabled = function( collection, item ) {
|
636
|
+
|
637
|
+
var calendar = this
|
638
|
+
|
639
|
+
// Go through each item to enable.
|
640
|
+
item.map( function( timeUnit ) {
|
641
|
+
|
642
|
+
// Check if the time unit is already within the collection.
|
643
|
+
if ( calendar.filterDisabled( collection, timeUnit, 1 ).length ) {
|
644
|
+
|
645
|
+
// Remove the unit directly from the collection.
|
646
|
+
collection = calendar.removeDisabled( collection, [timeUnit] )
|
647
|
+
|
648
|
+
// If the unit is an array and it falls within a
|
649
|
+
// disabled weekday, invert it and then insert it.
|
650
|
+
if (
|
651
|
+
$.isArray( timeUnit ) &&
|
652
|
+
collection.filter( function( disabledDate ) {
|
653
|
+
return Picker._.isInteger( disabledDate ) && calendar.create( timeUnit ).day === disabledDate - 1
|
654
|
+
}).length
|
655
|
+
) {
|
656
|
+
timeUnit = timeUnit.slice(0)
|
657
|
+
timeUnit.push( 'inverted' )
|
658
|
+
collection.push( timeUnit )
|
659
|
+
}
|
660
|
+
}
|
661
|
+
})
|
662
|
+
|
663
|
+
// Return the final collection.
|
664
|
+
return collection
|
665
|
+
} //DatePicker.prototype.addEnabled
|
666
|
+
|
667
|
+
|
625
668
|
/**
|
626
669
|
* Add an item to the disabled collection.
|
627
670
|
*/
|
628
671
|
DatePicker.prototype.addDisabled = function( collection, item ) {
|
672
|
+
|
629
673
|
var calendar = this
|
674
|
+
|
675
|
+
// Go through each item to disable.
|
630
676
|
item.map( function( timeUnit ) {
|
677
|
+
|
678
|
+
// Add the time unit if it isn’t already within the collection.
|
631
679
|
if ( !calendar.filterDisabled( collection, timeUnit ).length ) {
|
632
680
|
collection.push( timeUnit )
|
633
681
|
}
|
682
|
+
|
683
|
+
// If the time unit is an array and falls within the range, just remove it.
|
684
|
+
else if ( $.isArray( timeUnit ) && calendar.filterDisabled( collection, timeUnit, 1 ).length ) {
|
685
|
+
collection = calendar.removeDisabled( collection, [timeUnit] )
|
686
|
+
}
|
634
687
|
})
|
688
|
+
|
689
|
+
// Return the final collection.
|
635
690
|
return collection
|
636
691
|
} //DatePicker.prototype.addDisabled
|
637
692
|
|
@@ -640,10 +695,17 @@ DatePicker.prototype.addDisabled = function( collection, item ) {
|
|
640
695
|
* Remove an item from the disabled collection.
|
641
696
|
*/
|
642
697
|
DatePicker.prototype.removeDisabled = function( collection, item ) {
|
698
|
+
|
643
699
|
var calendar = this
|
700
|
+
|
701
|
+
// Go through each item to enable.
|
644
702
|
item.map( function( timeUnit ) {
|
703
|
+
|
704
|
+
// Filter each item out of the collection.
|
645
705
|
collection = calendar.filterDisabled( collection, timeUnit, 1 )
|
646
706
|
})
|
707
|
+
|
708
|
+
// Return the final colleciton.
|
647
709
|
return collection
|
648
710
|
} //DatePicker.prototype.removeDisabled
|
649
711
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
/*!
|
3
|
-
* pickadate.js v3.3.
|
3
|
+
* pickadate.js v3.3.1, 2013/12/04
|
4
4
|
* By Amsul, http://amsul.ca
|
5
5
|
* Hosted on http://amsul.github.io/pickadate.js
|
6
6
|
* Licensed under MIT
|
@@ -92,7 +92,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
92
92
|
// and set as readonly to prevent keyboard popup.
|
93
93
|
ELEMENT.autofocus = ELEMENT == document.activeElement
|
94
94
|
ELEMENT.type = 'text'
|
95
|
-
ELEMENT.readOnly =
|
95
|
+
ELEMENT.readOnly = !SETTINGS.editable
|
96
96
|
|
97
97
|
|
98
98
|
// Create a new picker component with the settings.
|
@@ -110,10 +110,28 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
110
110
|
event.stopPropagation()
|
111
111
|
},
|
112
112
|
|
113
|
-
//
|
113
|
+
// When something within the root holder is clicked, stop it
|
114
|
+
// from bubbling to the doc.
|
114
115
|
'mousedown click': function( event ) {
|
115
|
-
|
116
|
+
|
117
|
+
var target = event.target
|
118
|
+
|
119
|
+
// Make sure the target isn’t the root holder so it can bubble up.
|
120
|
+
if ( target != P.$root.children()[ 0 ] ) {
|
121
|
+
|
116
122
|
event.stopPropagation()
|
123
|
+
|
124
|
+
// * For mousedown events, cancel the default action in order to
|
125
|
+
// prevent cases where focus is shifted onto external elements
|
126
|
+
// when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).
|
127
|
+
if ( event.type == 'mousedown' && !$( target ).is( ':input' ) ) {
|
128
|
+
|
129
|
+
event.preventDefault()
|
130
|
+
|
131
|
+
// Re-focus onto the element so that users can click away
|
132
|
+
// from elements focused within the picker.
|
133
|
+
ELEMENT.focus()
|
134
|
+
}
|
117
135
|
}
|
118
136
|
}
|
119
137
|
}).
|
@@ -131,7 +149,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
131
149
|
activeElement = activeElement && ( activeElement.type || activeElement.href )
|
132
150
|
|
133
151
|
// If it’s disabled or nothing inside is actively focused, re-focus the element.
|
134
|
-
if ( targetDisabled || !$.contains( P.$root[0], activeElement ) ) {
|
152
|
+
if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {
|
135
153
|
ELEMENT.focus()
|
136
154
|
}
|
137
155
|
|
@@ -175,8 +193,20 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
175
193
|
}
|
176
194
|
|
177
195
|
|
178
|
-
//
|
179
|
-
$ELEMENT.
|
196
|
+
// Prepare the input element.
|
197
|
+
$ELEMENT.
|
198
|
+
|
199
|
+
// Store the picker data by component name.
|
200
|
+
data( NAME, P ).
|
201
|
+
|
202
|
+
// Add the “input” class name.
|
203
|
+
addClass( CLASSES.input ).
|
204
|
+
|
205
|
+
// If there’s a `data-value`, update the value of the element.
|
206
|
+
val( $ELEMENT.data( 'value' ) ? PickerConstructor._.trigger( P.component.formats.toString, P.component, [ SETTINGS.format, P.component.item.select ] ) : ELEMENT.value ).
|
207
|
+
|
208
|
+
// Insert the hidden input after the element.
|
209
|
+
after( P._hidden ).
|
180
210
|
|
181
211
|
// On focus/click, open the picker and adjust the root “focused” state.
|
182
212
|
on( 'focus.P' + STATE.id + ' click.P' + STATE.id, focusToOpen ).
|
@@ -186,7 +216,10 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
186
216
|
if ( P._hidden ) {
|
187
217
|
P._hidden.value = ELEMENT.value ? PickerConstructor._.trigger( P.component.formats.toString, P.component, [ SETTINGS.formatSubmit, P.component.item.select ] ) : ''
|
188
218
|
}
|
189
|
-
})
|
219
|
+
})
|
220
|
+
|
221
|
+
// Only bind keydown events if the element isn’t editable.
|
222
|
+
if ( !SETTINGS.editable ) $ELEMENT.
|
190
223
|
|
191
224
|
// Handle keyboard event based on the picker being opened or not.
|
192
225
|
on( 'keydown.P' + STATE.id, function( event ) {
|
@@ -214,16 +247,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
214
247
|
if ( isKeycodeDelete ) { P.clear().close() }
|
215
248
|
else { P.open() }
|
216
249
|
}
|
217
|
-
})
|
218
|
-
|
219
|
-
// If there’s a `data-value`, update the value of the element.
|
220
|
-
val( $ELEMENT.data( 'value' ) ? PickerConstructor._.trigger( P.component.formats.toString, P.component, [ SETTINGS.format, P.component.item.select ] ) : ELEMENT.value ).
|
221
|
-
|
222
|
-
// Insert the hidden input after the element.
|
223
|
-
after( P._hidden ).
|
224
|
-
|
225
|
-
// Store the picker data by component name.
|
226
|
-
data( NAME, P )
|
250
|
+
})
|
227
251
|
|
228
252
|
|
229
253
|
// Insert the root as specified in the settings.
|
@@ -337,11 +361,18 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
337
361
|
// Bind the document events.
|
338
362
|
$document.on( 'click.P' + STATE.id + ' focusin.P' + STATE.id, function( event ) {
|
339
363
|
|
364
|
+
var target = event.target
|
365
|
+
|
340
366
|
// If the target of the event is not the element, close the picker picker.
|
341
367
|
// * Don’t worry about clicks or focusins on the root because those don’t bubble up.
|
342
368
|
// Also, for Firefox, a click on an `option` element bubbles up directly
|
343
369
|
// to the doc. So make sure the target wasn't the doc.
|
344
|
-
if (
|
370
|
+
if ( target != ELEMENT && target != document ) {
|
371
|
+
|
372
|
+
// If the target was the holder that covers the screen,
|
373
|
+
// keep the element focused to maintain tabindex.
|
374
|
+
P.close( target === P.$root.children()[0] )
|
375
|
+
}
|
345
376
|
|
346
377
|
}).on( 'keydown.P' + STATE.id, function( event ) {
|
347
378
|
|
@@ -445,9 +476,12 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
445
476
|
set: function( thing, value, options ) {
|
446
477
|
|
447
478
|
var thingItem, thingValue,
|
448
|
-
thingIsObject =
|
479
|
+
thingIsObject = $.isPlainObject( thing ),
|
449
480
|
thingObject = thingIsObject ? thing : {}
|
450
481
|
|
482
|
+
// Make sure we have usable options.
|
483
|
+
options = thingIsObject && $.isPlainObject( value ) ? value : options || {}
|
484
|
+
|
451
485
|
if ( thing ) {
|
452
486
|
|
453
487
|
// If the thing isn’t an object, make it one.
|
@@ -463,7 +497,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
463
497
|
|
464
498
|
// First, if the item exists and there’s a value, set it.
|
465
499
|
if ( P.component.item[ thingItem ] ) {
|
466
|
-
P.component.set( thingItem, thingValue, options
|
500
|
+
P.component.set( thingItem, thingValue, options )
|
467
501
|
}
|
468
502
|
|
469
503
|
// Then, check to update the element value and broadcast a change.
|
@@ -478,8 +512,8 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
478
512
|
P.render()
|
479
513
|
}
|
480
514
|
|
481
|
-
//
|
482
|
-
return P.trigger( 'set', thingObject )
|
515
|
+
// When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.
|
516
|
+
return options.muted ? P : P.trigger( 'set', thingObject )
|
483
517
|
}, //set
|
484
518
|
|
485
519
|
|
@@ -518,7 +552,7 @@ function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
|
|
518
552
|
on: function( thing, method ) {
|
519
553
|
|
520
554
|
var thingName, thingMethod,
|
521
|
-
thingIsObject =
|
555
|
+
thingIsObject = $.isPlainObject( thing ),
|
522
556
|
thingObject = thingIsObject ? thing : {}
|
523
557
|
|
524
558
|
if ( thing ) {
|
@@ -740,14 +774,6 @@ PickerConstructor._ = {
|
|
740
774
|
},
|
741
775
|
|
742
776
|
|
743
|
-
/**
|
744
|
-
* Tell if something is an object.
|
745
|
-
*/
|
746
|
-
isObject: function( value ) {
|
747
|
-
return {}.toString.call( value ).indexOf( 'Object' ) > -1
|
748
|
-
},
|
749
|
-
|
750
|
-
|
751
777
|
/**
|
752
778
|
* Tell if something is a date object.
|
753
779
|
*/
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
/*!
|
3
|
-
* Time picker for pickadate.js v3.3.
|
3
|
+
* Time picker for pickadate.js v3.3.1
|
4
4
|
* http://amsul.github.io/pickadate.js/time.htm
|
5
5
|
*/
|
6
6
|
|
@@ -102,7 +102,7 @@ function TimePicker( picker, settings ) {
|
|
102
102
|
var $pickerHolder = picker.$root.children(),
|
103
103
|
$viewset = $pickerHolder.find( '.' + settings.klass.viewset )
|
104
104
|
if ( $viewset.length ) {
|
105
|
-
$pickerHolder[ 0 ].scrollTop
|
105
|
+
$pickerHolder[ 0 ].scrollTop = ~~$viewset.position().top - ( $viewset[ 0 ].clientHeight * 2 )
|
106
106
|
}
|
107
107
|
}).
|
108
108
|
on( 'open', function() {
|
@@ -170,30 +170,41 @@ TimePicker.prototype.create = function( type, value, options ) {
|
|
170
170
|
|
171
171
|
var clock = this
|
172
172
|
|
173
|
-
// If there
|
173
|
+
// If there’s no value, use the type as the value.
|
174
174
|
value = value === undefined ? type : value
|
175
175
|
|
176
|
-
// If it
|
177
|
-
if ( Picker._.
|
176
|
+
// If it’s a date object, convert it into an array.
|
177
|
+
if ( Picker._.isDate( value ) ) {
|
178
|
+
value = [ value.getHours(), value.getMinutes() ]
|
179
|
+
}
|
180
|
+
|
181
|
+
// If it’s an object, use the “pick” value.
|
182
|
+
if ( $.isPlainObject( value ) && Picker._.isInteger( value.pick ) ) {
|
178
183
|
value = value.pick
|
179
184
|
}
|
180
185
|
|
181
|
-
// If it
|
186
|
+
// If it’s an array, convert it into minutes.
|
182
187
|
else if ( $.isArray( value ) ) {
|
183
188
|
value = +value[ 0 ] * MINUTES_IN_HOUR + (+value[ 1 ])
|
184
189
|
}
|
185
190
|
|
186
|
-
// If no valid value is passed, set it to
|
191
|
+
// If no valid value is passed, set it to “now”.
|
187
192
|
else if ( !Picker._.isInteger( value ) ) {
|
188
193
|
value = clock.now( type, value, options )
|
189
194
|
}
|
190
195
|
|
191
|
-
// If we
|
196
|
+
// If we’re setting the max, make sure it’s greater than the min.
|
192
197
|
if ( type == 'max' && value < clock.item.min.pick ) {
|
193
198
|
value += MINUTES_IN_DAY
|
194
199
|
}
|
195
200
|
|
196
|
-
//
|
201
|
+
// If the value doesn’t fall directly on the interval,
|
202
|
+
// add one interval to indicate it as “passed”.
|
203
|
+
if ( type != 'min' && type != 'max' && (value - clock.item.min.pick) % clock.item.interval !== 0 ) {
|
204
|
+
value += clock.item.interval
|
205
|
+
}
|
206
|
+
|
207
|
+
// Normalize it into a “reachable” interval.
|
197
208
|
value = clock.normalize( type, value, options )
|
198
209
|
|
199
210
|
// Return the compiled object.
|
@@ -208,7 +219,7 @@ TimePicker.prototype.create = function( type, value, options ) {
|
|
208
219
|
// The time in total minutes.
|
209
220
|
time: ( MINUTES_IN_DAY + value ) % MINUTES_IN_DAY,
|
210
221
|
|
211
|
-
// Reference to the
|
222
|
+
// Reference to the “relative” value to pick.
|
212
223
|
pick: value
|
213
224
|
}
|
214
225
|
} //TimePicker.prototype.create
|
@@ -222,6 +233,9 @@ TimePicker.prototype.now = function( type, value/*, options*/ ) {
|
|
222
233
|
var date = new Date(),
|
223
234
|
dateMinutes = date.getHours() * MINUTES_IN_HOUR + date.getMinutes()
|
224
235
|
|
236
|
+
// Make sure “now” falls within the interval range.
|
237
|
+
dateMinutes -= dateMinutes % this.item.interval
|
238
|
+
|
225
239
|
// If the value is a number, adjust by that many intervals because
|
226
240
|
// the time has passed. In the case of “midnight” and a negative `min`,
|
227
241
|
// increase the value by 2. Otherwise increase it by 1.
|
@@ -244,12 +258,12 @@ TimePicker.prototype.now = function( type, value/*, options*/ ) {
|
|
244
258
|
*/
|
245
259
|
TimePicker.prototype.normalize = function( type, value/*, options*/ ) {
|
246
260
|
|
247
|
-
var
|
261
|
+
var interval = this.item.interval,
|
248
262
|
|
249
|
-
// If setting min
|
263
|
+
// If setting min time, don’t shift anything.
|
250
264
|
// Otherwise get the value and min difference and then
|
251
265
|
// normalize the difference with the interval.
|
252
|
-
difference = type == 'min'
|
266
|
+
difference = type == 'min' ? 0 : ( value - this.item.min.pick ) % interval
|
253
267
|
|
254
268
|
// If it’s a negative value, add one interval to keep it as “passed”.
|
255
269
|
return value - ( difference + ( value < 0 ? interval : 0 ) )
|
@@ -263,18 +277,18 @@ TimePicker.prototype.measure = function( type, value, options ) {
|
|
263
277
|
|
264
278
|
var clock = this
|
265
279
|
|
266
|
-
// If it
|
280
|
+
// If it’s anything false-y, set it to the default.
|
267
281
|
if ( !value ) {
|
268
282
|
value = type == 'min' ? [ 0, 0 ] : [ HOURS_IN_DAY - 1, MINUTES_IN_HOUR - 1 ]
|
269
283
|
}
|
270
284
|
|
271
|
-
// If it
|
285
|
+
// If it’s a literal true, or an integer, make it relative to now.
|
272
286
|
else if ( value === true || Picker._.isInteger( value ) ) {
|
273
287
|
value = clock.now( type, value, options )
|
274
288
|
}
|
275
289
|
|
276
|
-
// If it
|
277
|
-
else if (
|
290
|
+
// If it’s an object already, just normalize it.
|
291
|
+
else if ( $.isPlainObject( value ) && Picker._.isInteger( value.pick ) ) {
|
278
292
|
value = clock.normalize( type, value.pick, options )
|
279
293
|
}
|
280
294
|
|
@@ -320,21 +334,28 @@ TimePicker.prototype.disabled = function( timeObject ) {
|
|
320
334
|
clock = this,
|
321
335
|
|
322
336
|
// Filter through the disabled times to check if this is one.
|
323
|
-
|
337
|
+
isDisabledMatch = clock.item.disable.filter( function( timeToDisable ) {
|
324
338
|
|
325
339
|
// If the time is a number, match the hours.
|
326
340
|
if ( Picker._.isInteger( timeToDisable ) ) {
|
327
341
|
return timeObject.hour == timeToDisable
|
328
342
|
}
|
329
343
|
|
330
|
-
// If it
|
331
|
-
if ( $.isArray( timeToDisable ) ) {
|
344
|
+
// If it’s an array, create the object and match the times.
|
345
|
+
if ( $.isArray( timeToDisable ) || Picker._.isDate( timeToDisable ) ) {
|
332
346
|
return timeObject.pick == clock.create( timeToDisable ).pick
|
333
347
|
}
|
334
|
-
})
|
348
|
+
})
|
349
|
+
|
350
|
+
// If this time matches a disabled time, confirm it’s not inverted.
|
351
|
+
isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( timeToDisable ) {
|
352
|
+
return $.isArray( timeToDisable ) && timeToDisable[2] == 'inverted'
|
353
|
+
}).length
|
335
354
|
|
336
355
|
// If the clock is "enabled" flag is flipped, flip the condition.
|
337
|
-
return clock.item.enable === -1 ? !
|
356
|
+
return clock.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||
|
357
|
+
timeObject.pick < clock.item.min.pick ||
|
358
|
+
timeObject.pick > clock.item.max.pick
|
338
359
|
} //TimePicker.prototype.disabled
|
339
360
|
|
340
361
|
|
@@ -384,7 +405,7 @@ TimePicker.prototype.parse = function( type, value, options ) {
|
|
384
405
|
var clock = this,
|
385
406
|
parsingObject = {}
|
386
407
|
|
387
|
-
if ( !value || Picker._.isInteger( value ) || $.isArray( value ) || Picker._.isDate( value ) ||
|
408
|
+
if ( !value || Picker._.isInteger( value ) || $.isArray( value ) || Picker._.isDate( value ) || $.isPlainObject( value ) && Picker._.isInteger( value.pick ) ) {
|
388
409
|
return value
|
389
410
|
}
|
390
411
|
|
@@ -491,11 +512,11 @@ TimePicker.prototype.flipItem = function( type, value/*, options*/ ) {
|
|
491
512
|
|
492
513
|
var clock = this,
|
493
514
|
collection = clock.item.disable,
|
494
|
-
|
515
|
+
isFlippedBase = clock.item.enable === -1
|
495
516
|
|
496
517
|
// Flip the enabled and disabled times.
|
497
518
|
if ( value == 'flip' ) {
|
498
|
-
clock.item.enable =
|
519
|
+
clock.item.enable = isFlippedBase ? 1 : -1
|
499
520
|
}
|
500
521
|
|
501
522
|
// Reset the collection and enable the base state.
|
@@ -514,29 +535,79 @@ TimePicker.prototype.flipItem = function( type, value/*, options*/ ) {
|
|
514
535
|
else if ( $.isArray( value ) ) {
|
515
536
|
|
516
537
|
// Check if we have to add/remove from collection.
|
517
|
-
if (
|
518
|
-
collection = clock.removeDisabled( collection, value )
|
519
|
-
}
|
520
|
-
else if ( !isFlipped && type == 'disable' || isFlipped && type == 'enable' ) {
|
538
|
+
if ( isFlippedBase && type == 'enable' || !isFlippedBase && type == 'disable' ) {
|
521
539
|
collection = clock.addDisabled( collection, value )
|
522
540
|
}
|
541
|
+
else if ( !isFlippedBase && type == 'enable' ) {
|
542
|
+
collection = clock.addEnabled( collection, value )
|
543
|
+
}
|
544
|
+
else if ( isFlippedBase && type == 'disable' ) {
|
545
|
+
collection = clock.removeDisabled( collection, value )
|
546
|
+
}
|
523
547
|
}
|
524
548
|
|
525
549
|
return collection
|
526
550
|
} //TimePicker.prototype.flipItem
|
527
551
|
|
528
552
|
|
553
|
+
/**
|
554
|
+
* Add an enabled (inverted) item to the disabled collection.
|
555
|
+
*/
|
556
|
+
TimePicker.prototype.addEnabled = function( collection, item ) {
|
557
|
+
|
558
|
+
var clock = this
|
559
|
+
|
560
|
+
// Go through each item to enable.
|
561
|
+
item.map( function( timeUnit ) {
|
562
|
+
|
563
|
+
// Check if the time unit is already within the collection.
|
564
|
+
if ( clock.filterDisabled( collection, timeUnit, 1 ).length ) {
|
565
|
+
|
566
|
+
// Remove the unit directly from the collection.
|
567
|
+
collection = clock.removeDisabled( collection, [timeUnit] )
|
568
|
+
|
569
|
+
// If the unit is an array and it falls within a
|
570
|
+
// disabled weekday, invert it and then insert it.
|
571
|
+
if (
|
572
|
+
$.isArray( timeUnit ) &&
|
573
|
+
collection.filter( function( disabledHour ) {
|
574
|
+
return Picker._.isInteger( disabledHour ) && clock.create( timeUnit ).hour === disabledHour
|
575
|
+
}).length
|
576
|
+
) {
|
577
|
+
timeUnit = timeUnit.slice(0)
|
578
|
+
timeUnit.push( 'inverted' )
|
579
|
+
collection.push( timeUnit )
|
580
|
+
}
|
581
|
+
}
|
582
|
+
})
|
583
|
+
|
584
|
+
// Return the final collection.
|
585
|
+
return collection
|
586
|
+
} //TimePicker.prototype.addEnabled
|
587
|
+
|
588
|
+
|
529
589
|
/**
|
530
590
|
* Add an item to the disabled collection.
|
531
591
|
*/
|
532
592
|
TimePicker.prototype.addDisabled = function( collection, item ) {
|
593
|
+
|
533
594
|
var clock = this
|
534
|
-
|
535
|
-
|
595
|
+
|
596
|
+
// Go through each item to disable.
|
597
|
+
item.map( function( timeUnit ) {
|
598
|
+
|
599
|
+
// Add the time unit if it isn’t already within the collection.
|
536
600
|
if ( !clock.filterDisabled( collection, timeUnit ).length ) {
|
537
601
|
collection.push( timeUnit )
|
538
602
|
}
|
603
|
+
|
604
|
+
// If the time unit is an array and falls within the range, just remove it.
|
605
|
+
else if ( $.isArray( timeUnit ) && clock.filterDisabled( collection, timeUnit, 1 ).length ) {
|
606
|
+
collection = clock.removeDisabled( collection, [timeUnit] )
|
607
|
+
}
|
539
608
|
})
|
609
|
+
|
610
|
+
// Return the final collection.
|
540
611
|
return collection
|
541
612
|
} //TimePicker.prototype.addDisabled
|
542
613
|
|
@@ -545,10 +616,17 @@ TimePicker.prototype.addDisabled = function( collection, item ) {
|
|
545
616
|
* Remove an item from the disabled collection.
|
546
617
|
*/
|
547
618
|
TimePicker.prototype.removeDisabled = function( collection, item ) {
|
619
|
+
|
548
620
|
var clock = this
|
621
|
+
|
622
|
+
// Go through each item to enable.
|
549
623
|
item.map( function( timeUnit ) {
|
624
|
+
|
625
|
+
// Filter each item out of the collection.
|
550
626
|
collection = clock.filterDisabled( collection, timeUnit, 1 )
|
551
627
|
})
|
628
|
+
|
629
|
+
// Return the final colleciton.
|
552
630
|
return collection
|
553
631
|
} //TimePicker.prototype.removeDisabled
|
554
632
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
// French
|
2
2
|
|
3
3
|
jQuery.extend( jQuery.fn.pickadate.defaults, {
|
4
|
-
monthsFull: [ '
|
5
|
-
monthsShort: [ '
|
6
|
-
weekdaysFull: [ '
|
7
|
-
weekdaysShort: [ '
|
8
|
-
today: '
|
9
|
-
clear: '
|
4
|
+
monthsFull: [ 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre' ],
|
5
|
+
monthsShort: [ 'Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil', 'Aou', 'Sep', 'Oct', 'Nov', 'Dec' ],
|
6
|
+
weekdaysFull: [ 'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi' ],
|
7
|
+
weekdaysShort: [ 'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam' ],
|
8
|
+
today: 'Aujourd\'hui',
|
9
|
+
clear: 'Effacer',
|
10
10
|
firstDay: 1,
|
11
11
|
format: 'dd mmmm yyyy',
|
12
12
|
formatSubmit: 'yyyy/mm/dd'
|
13
|
-
});
|
13
|
+
});
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// Traditional Chinese
|
2
|
+
|
3
|
+
jQuery.extend( jQuery.fn.pickadate.defaults, {
|
4
|
+
monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ],
|
5
|
+
monthsShort: [ '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二' ],
|
6
|
+
weekdaysFull: [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六' ],
|
7
|
+
weekdaysShort: [ '日', '一', '二', '三', '四', '五', '六' ],
|
8
|
+
today: '今天',
|
9
|
+
clear: '清除',
|
10
|
+
firstDay: 1,
|
11
|
+
format: 'yyyy 年 mm 月 dd 日',
|
12
|
+
formatSubmit: 'yyyy/mm/dd'
|
13
|
+
});
|
@@ -2,8 +2,7 @@
|
|
2
2
|
$BASE-PICKER
|
3
3
|
========================================================================== */
|
4
4
|
/**
|
5
|
-
* Note: the root picker element should
|
6
|
-
* more than what’s here. Style the `.picker__holder` instead.
|
5
|
+
* Note: the root picker element should *NOT* be styled more than what’s here.
|
7
6
|
*/
|
8
7
|
.picker {
|
9
8
|
font-size: 16px;
|
@@ -12,6 +11,10 @@
|
|
12
11
|
color: #000000;
|
13
12
|
position: absolute;
|
14
13
|
z-index: 10000;
|
14
|
+
-webkit-user-select: none;
|
15
|
+
-moz-user-select: none;
|
16
|
+
-ms-user-select: none;
|
17
|
+
user-select: none;
|
15
18
|
}
|
16
19
|
/**
|
17
20
|
* The picker input element.
|
@@ -39,8 +42,7 @@
|
|
39
42
|
* Demo: http://amsul.github.io/pickadate.js
|
40
43
|
*/
|
41
44
|
/**
|
42
|
-
* Note: the root picker element should
|
43
|
-
* more than what’s here. Style the `.picker__holder` instead.
|
45
|
+
* Note: the root picker element should *NOT* be styled more than what’s here.
|
44
46
|
*/
|
45
47
|
.picker {
|
46
48
|
width: 100%;
|
@@ -52,14 +54,16 @@
|
|
52
54
|
position: absolute;
|
53
55
|
background: #ffffff;
|
54
56
|
border: 1px solid #aaaaaa;
|
57
|
+
border-top-width: 0;
|
58
|
+
border-bottom-width: 0;
|
59
|
+
-webkit-border-radius: 0 0 5px 5px;
|
60
|
+
-moz-border-radius: 0 0 5px 5px;
|
61
|
+
border-radius: 0 0 5px 5px;
|
55
62
|
-webkit-box-sizing: border-box;
|
56
63
|
-moz-box-sizing: border-box;
|
57
64
|
box-sizing: border-box;
|
58
65
|
min-width: 176px;
|
59
66
|
max-width: 466px;
|
60
|
-
-webkit-border-radius: 0 0 5px 5px;
|
61
|
-
-moz-border-radius: 0 0 5px 5px;
|
62
|
-
border-radius: 0 0 5px 5px;
|
63
67
|
max-height: 0;
|
64
68
|
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
65
69
|
filter: alpha(opacity=0);
|
@@ -68,9 +72,19 @@
|
|
68
72
|
-webkit-transform: translateY(-1em) perspective(600px) rotateX(10deg);
|
69
73
|
-moz-transform: translateY(-1em) perspective(600px) rotateX(10deg);
|
70
74
|
transform: translateY(-1em) perspective(600px) rotateX(10deg);
|
71
|
-
-webkit-transition: all 0.15s ease-out, max-height 0 0.15s;
|
72
|
-
-moz-transition: all 0.15s ease-out, max-height 0 0.15s;
|
73
|
-
transition: all 0.15s ease-out, max-height 0 0.15s;
|
75
|
+
-webkit-transition: all 0.15s ease-out, max-height 0 0.15s, border-width 0 0.15s;
|
76
|
+
-moz-transition: all 0.15s ease-out, max-height 0 0.15s, border-width 0 0.15s;
|
77
|
+
transition: all 0.15s ease-out, max-height 0 0.15s, border-width 0 0.15s;
|
78
|
+
}
|
79
|
+
/**
|
80
|
+
* The frame and wrap work together to ensure that
|
81
|
+
* clicks within the picker don’t reach the holder.
|
82
|
+
*/
|
83
|
+
.picker__frame {
|
84
|
+
padding: 1px;
|
85
|
+
}
|
86
|
+
.picker__wrap {
|
87
|
+
margin: -1px;
|
74
88
|
}
|
75
89
|
/**
|
76
90
|
* When the picker opens...
|
@@ -81,12 +95,14 @@
|
|
81
95
|
filter: alpha(opacity=100);
|
82
96
|
-moz-opacity: 1;
|
83
97
|
opacity: 1;
|
98
|
+
border-top-width: 1px;
|
99
|
+
border-bottom-width: 1px;
|
84
100
|
-webkit-transform: translateY(0) perspective(600px) rotateX(0);
|
85
101
|
-moz-transform: translateY(0) perspective(600px) rotateX(0);
|
86
102
|
transform: translateY(0) perspective(600px) rotateX(0);
|
87
|
-
-webkit-transition: all 0.15s ease-out, max-height 0;
|
88
|
-
-moz-transition: all 0.15s ease-out, max-height 0;
|
89
|
-
transition: all 0.15s ease-out, max-height 0;
|
103
|
+
-webkit-transition: all 0.15s ease-out, max-height 0, border-width 0;
|
104
|
+
-moz-transition: all 0.15s ease-out, max-height 0, border-width 0;
|
105
|
+
transition: all 0.15s ease-out, max-height 0, border-width 0;
|
90
106
|
-webkit-box-shadow: 0 6px 18px 1px rgba(0, 0, 0, 0.12);
|
91
107
|
-moz-box-shadow: 0 6px 18px 1px rgba(0, 0, 0, 0.12);
|
92
108
|
box-shadow: 0 6px 18px 1px rgba(0, 0, 0, 0.12);
|
@@ -2,8 +2,7 @@
|
|
2
2
|
$BASE-PICKER
|
3
3
|
========================================================================== */
|
4
4
|
/**
|
5
|
-
* Note: the root picker element should
|
6
|
-
* more than what’s here. Style the `.picker__holder` instead.
|
5
|
+
* Note: the root picker element should *NOT* be styled more than what’s here.
|
7
6
|
*/
|
8
7
|
.picker {
|
9
8
|
font-size: 16px;
|
@@ -12,6 +11,10 @@
|
|
12
11
|
color: #000000;
|
13
12
|
position: absolute;
|
14
13
|
z-index: 10000;
|
14
|
+
-webkit-user-select: none;
|
15
|
+
-moz-user-select: none;
|
16
|
+
-ms-user-select: none;
|
17
|
+
user-select: none;
|
15
18
|
}
|
16
19
|
/**
|
17
20
|
* The picker input element.
|
@@ -38,6 +41,9 @@
|
|
38
41
|
* Default mobile-first, responsive styling for pickadate.js
|
39
42
|
* Demo: http://amsul.github.io/pickadate.js
|
40
43
|
*/
|
44
|
+
/**
|
45
|
+
* Note: the root picker element should *NOT* be styled more than what’s here.
|
46
|
+
*/
|
41
47
|
/**
|
42
48
|
* Make the holder and frame fullscreen.
|
43
49
|
*/
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/*!
|
2
|
+
* Styling for RTL (right-to-left) languages using pickadate.js
|
3
|
+
*/
|
4
|
+
/**
|
5
|
+
* Switch the direction - only really necessary if
|
6
|
+
* it hasn’t already been applied higher up in the DOM.
|
7
|
+
*/
|
8
|
+
.picker {
|
9
|
+
direction: rtl;
|
10
|
+
}
|
11
|
+
/**
|
12
|
+
* Flip around the “next” and “previous” buttons.
|
13
|
+
*/
|
14
|
+
.picker__nav--next {
|
15
|
+
right: auto;
|
16
|
+
left: -1em;
|
17
|
+
}
|
18
|
+
.picker__nav--prev {
|
19
|
+
left: auto;
|
20
|
+
right: -1em;
|
21
|
+
}
|
22
|
+
.picker__nav--next:before {
|
23
|
+
border-left: 0;
|
24
|
+
border-right: 0.75em solid #000000;
|
25
|
+
}
|
26
|
+
.picker__nav--prev:before {
|
27
|
+
border-right: 0;
|
28
|
+
border-left: 0.75em solid #000000;
|
29
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pickadate-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Fraser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -105,12 +105,14 @@ files:
|
|
105
105
|
- vendor/assets/javascripts/pickadate/translations/tr_TR.js
|
106
106
|
- vendor/assets/javascripts/pickadate/translations/uk_UA.js
|
107
107
|
- vendor/assets/javascripts/pickadate/translations/zh_CN.js
|
108
|
+
- vendor/assets/javascripts/pickadate/translations/zh_TW.js
|
108
109
|
- vendor/assets/stylesheets/pickadate/classic.css
|
109
110
|
- vendor/assets/stylesheets/pickadate/classic.date.css
|
110
111
|
- vendor/assets/stylesheets/pickadate/classic.time.css
|
111
112
|
- vendor/assets/stylesheets/pickadate/default.css
|
112
113
|
- vendor/assets/stylesheets/pickadate/default.date.css
|
113
114
|
- vendor/assets/stylesheets/pickadate/default.time.css
|
115
|
+
- vendor/assets/stylesheets/pickadate/rtl.css
|
114
116
|
homepage: https://github.com/veracross/pickadate-rails
|
115
117
|
licenses:
|
116
118
|
- MIT
|