/*jshint
debug: true,
devel: true,
browser: true,
asi: true,
unused: true,
eqnull: true,
eqeqeq: true
*/
var $DOM = $( '#qunit-fixture' ),
$INPUT = $( '' )
/* ==========================================================================
Date picker tests
========================================================================== */
module( 'Date picker setup', {
setup: function() {
$DOM.append( $INPUT.clone() )
var $input = $DOM.find( 'input' ).pickadate()
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( 'Calendar stage', function() {
strictEqual( this.picker.$root.find( '.' + $.fn.pickadate.defaults.klass.table + ' [data-pick]' ).length, 42, '42 selectables dates' )
})
test( 'Properties', function() {
var picker = this.picker,
today = new Date()
today.setHours( 0, 0, 0, 0 )
strictEqual( picker.get( 'min' ).pick, -Infinity, 'Default “min” is -Infinity' )
strictEqual( picker.get( 'max' ).pick, Infinity, 'Default “max’ is +Infinity' )
strictEqual( picker.get( 'now' ).pick, today.getTime(), 'Default “now” is ' + picker.get( 'now', 'yyyy/mm/dd' ) )
deepEqual( picker.get( 'select' ), null, 'Default “select” is `null`' )
deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), 'Default “highlight” is “now”' )
strictEqual( picker.get( 'view' ).pick, today.setDate( 1 ), 'Default “view” is ' + picker.get( 'view', 'yyyy/mm/dd' ) )
})
test( 'First weekday', function() {
var picker = this.picker,
$input = picker.$node
strictEqual( picker.$root.find( '.' + $.fn.pickadate.defaults.klass.weekdays ).first().text(), $.fn.pickadate.defaults.weekdaysShort[0], 'Sunday is first day' )
picker.stop().$node.pickadate({ firstDay: 1 })
strictEqual( $input.pickadate( 'picker' ).$root.find( '.' + $.fn.pickadate.defaults.klass.weekdays ).first().text(), $.fn.pickadate.defaults.weekdaysShort[1], 'Monday is first day' )
picker.set( 'select', [ 2013, 8, 14 ] )
strictEqual( picker.$root.find( 'td' ).first().text(), '1', 'Months starting on Sunday shift back a week' )
})
test( 'Formats', function() {
var picker = this.picker,
today = new Date(),
leadZero = function( number ) {
return ( number < 10 ? '0' : '' ) + number
},
formats = {
d: function() {
return '' + today.getDate()
},
dd: function() {
return leadZero( today.getDate() )
},
ddd: function() {
return $.fn.pickadate.defaults.weekdaysShort[ today.getDay() ]
},
dddd: function() {
return $.fn.pickadate.defaults.weekdaysFull[ today.getDay() ]
},
m: function() {
return '' + ( today.getMonth() + 1 )
},
mm: function() {
return leadZero( ( today.getMonth() + 1 ) )
},
mmm: function() {
return $.fn.pickadate.defaults.monthsShort[ today.getMonth() ]
},
mmmm: function() {
return $.fn.pickadate.defaults.monthsFull[ today.getMonth() ]
},
yy: function() {
return ( '' + today.getFullYear() ).slice(2)
},
yyyy: function() {
return '' + today.getFullYear()
}
}
today.setHours(0,0,0,0)
;([ 'd', 'dd', 'ddd', 'dddd', 'm', 'mm', 'mmm', 'mmmm', 'yy', 'yyyy' ]).forEach( function( format ) {
var expect = formats[ format ]()
deepEqual( picker.get( 'now', format ), expect, '`' + format + '`: ' + expect )
})
})
module( 'Date picker setup', {
teardown: function() {
$DOM.empty()
}
})
test( 'Editable', function() {
$DOM.append( $INPUT.clone() ).append( $INPUT.clone() )
var $input1 = $DOM.find( 'input' ).eq(0).pickadate()
var $input2 = $DOM.find( 'input' ).eq(1).pickadate({
editable: true
})
strictEqual( $input1[0].readOnly, true, 'Editable: false' )
strictEqual( $input2[0].readOnly, false, 'Editable: true' )
})
test( 'Disable today with `min` as `true`', function() {
$DOM.append( $INPUT.clone() )
var today = new Date()
var $input = $DOM.find( 'input' ).pickadate({
min: true,
disable: [ today ]
})
var picker = $input.pickadate('picker')
var highlighted = picker.get('highlight')
deepEqual(
[today.getFullYear(), today.getMonth(), today.getDate() + 1],
[highlighted.year, highlighted.month, highlighted.date],
'Able to disable today'
)
})
test( 'Disable today with `max` as `true`', function() {
$DOM.append( $INPUT.clone() )
var today = new Date()
var $input = $DOM.find( 'input' ).pickadate({
max: true,
disable: [ today ]
})
var picker = $input.pickadate('picker')
var highlighted = picker.get('highlight')
deepEqual(
[today.getFullYear(), today.getMonth(), today.getDate() - 1],
[highlighted.year, highlighted.month, highlighted.date],
'Able to disable today'
)
})
module( 'Date picker `set`', {
setup: function() {
$DOM.append( $INPUT.clone() )
var $input = $DOM.find( 'input' ).pickadate()
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( '`clear`', function() {
var picker = this.picker
strictEqual( picker.get('select'), null, 'Starts off without a selection' )
picker.set('select', new Date())
notStrictEqual( picker.get('select'), null, 'A selection has been added' )
picker.clear()
strictEqual( picker.get('select'), null, 'Clears out selection' )
})
test( '`select`', function() {
var picker = this.picker,
today = new Date(),
playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 40 )
today.setHours(0,0,0,0)
// Using numbers
picker.set( 'select', playdate.getTime() )
deepEqual( picker.get( 'select' ).obj, playdate, '`select` using a number: ' + playdate )
strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), '`value` matches' )
deepEqual( picker.get( 'highlight' ), picker.get( 'select' ), '`highlight` updated' )
strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated' )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using arrays
playdate.setDate( playdate.getDate() + 40 )
picker.set( 'select', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )
deepEqual( picker.get( 'select' ).obj, playdate, '`select` using an array: ' + playdate )
strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), '`value` matches' )
deepEqual( picker.get( 'highlight' ), picker.get( 'select' ), '`highlight` updated' )
strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated' )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using JavaScript date objects
playdate.setDate( playdate.getDate() + 40 )
picker.set( 'select', playdate )
deepEqual( picker.get( 'select' ).obj, playdate, '`select` using a JS date object: ' + playdate )
strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), '`value` matches' )
deepEqual( picker.get( 'highlight' ), picker.get( 'select' ), '`highlight` updated' )
strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated' )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
})
test( '`highlight`', function() {
var picker = this.picker,
today = new Date(),
playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 40 )
today.setHours(0,0,0,0)
// Using numbers
picker.set( 'highlight', playdate.getTime() )
deepEqual( picker.get( 'highlight' ).obj, playdate, '`highlight` using a number: ' + playdate )
strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated: ' + picker.get( 'view', 'yyyy/mm/dd' ) )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using arrays
playdate.setDate( playdate.getDate() + 40 )
picker.set( 'highlight', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )
deepEqual( picker.get( 'highlight' ).obj, playdate, '`highlight` using an array: ' + playdate )
strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated: ' + picker.get( 'view', 'yyyy/mm/dd' ) )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using JavaScript date objects
playdate.setDate( playdate.getDate() + 40 )
picker.set( 'highlight', playdate )
deepEqual( picker.get( 'highlight' ).obj, playdate, '`highlight` using a JS date object: ' + playdate )
strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated: ' + picker.get( 'view', 'yyyy/mm/dd' ) )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
})
test( '`view`', function() {
var picker = this.picker,
today = new Date(),
playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 40 )
today.setHours(0,0,0,0)
// Using numbers
picker.set( 'view', playdate.getTime() )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` using a number: ' + playdate )
deepEqual( picker.get( 'highlight' ).obj, today, '`highlight` unaffected' )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using arrays
playdate.setDate( playdate.getDate() + 40 )
picker.set( 'view', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` using a number: ' + playdate )
deepEqual( picker.get( 'highlight' ).obj, today, '`highlight` unaffected' )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using JavaScript date objects
playdate.setDate( playdate.getDate() + 40 )
picker.set( 'view', playdate )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` using a JS date object: ' + playdate )
deepEqual( picker.get( 'highlight' ).obj, today, '`highlight` unaffected' )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
})
test( '`min`', function() {
var picker = this.picker,
today = new Date(),
playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() - 40 )
today.setHours(0,0,0,0)
// Using negative numbers
picker.set( 'min', -40 )
deepEqual( picker.get( 'min' ).obj, playdate, '`min` using a negative number: ' + playdate )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )
playdate.setDate( 1 )
playdate.setMonth( today.getMonth() )
playdate.setFullYear( today.getFullYear() )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using positive numbers
picker.set( 'min', 40 )
playdate.setDate( today.getDate() + 40 )
deepEqual( picker.get( 'min' ).obj, playdate, '`min` using a positive number: ' + playdate )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using arrays
playdate.setDate( playdate.getDate() + 40 )
picker.set( 'min', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )
deepEqual( picker.get( 'min' ).obj, playdate, '`min` using an array: ' + playdate )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using JavaScript date objects
playdate.setDate( playdate.getDate() + 40 )
picker.set( 'min', playdate )
deepEqual( picker.get( 'min' ).obj, playdate, '`min` using a JS date object: ' + playdate )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
})
test( '`min` using booleans', function() {
var picker = this.picker,
today = new Date(),
playdate = new Date( today.getFullYear(), today.getMonth(), 1 )
today.setHours(0,0,0,0)
// Using `true`
picker.set( 'min', true )
deepEqual( picker.get( 'min' ).obj, today, '`min` using `true`: ' + today )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
// Using `false`
picker.set( 'min', false )
deepEqual( picker.get( 'min' ).obj, -Infinity, '`min` using `false`: ' + -Infinity )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )
})
test( '`min` using strings', function() {
var picker = this.picker
var min = picker.get('min')
strictEqual( min.pick, -Infinity, 'No `min` date' )
picker.set( 'min', '8 January, 2013' )
min = picker.get('min')
deepEqual( [min.year, min.month, min.date], [2013, 0, 8], '`min` updated' )
})
test( '`max`', function() {
var picker = this.picker,
today = new Date(),
playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 40 )
today.setHours(0,0,0,0)
// Using positive numbers
picker.set( 'max', 40 )
deepEqual( picker.get( 'max' ).obj, playdate, '`max` using a positive number: ' + playdate )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )
playdate.setYear( today.getFullYear() )
playdate.setMonth( today.getMonth() )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
// Using negative numbers
picker.set( 'max', -40 )
playdate.setDate( today.getDate() - 40 )
deepEqual( picker.get( 'max' ).obj, playdate, '`max` using a negative number: ' + playdate )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
// Using arrays
playdate.setDate( playdate.getDate() - 40 )
picker.set( 'max', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )
deepEqual( picker.get( 'max' ).obj, playdate, '`max` using an array: ' + playdate )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
// Using JavaScript date objects
playdate.setDate( playdate.getDate() - 40 )
picker.set( 'max', playdate )
deepEqual( picker.get( 'max' ).obj, playdate, '`max` using a JS date object: ' + playdate )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
})
test( '`max` using booleans', function() {
var picker = this.picker,
today = new Date(),
playdate = new Date( today.getFullYear(), today.getMonth(), 1 )
today.setHours(0,0,0,0)
// Using `true`
picker.set( 'max', true )
deepEqual( picker.get( 'max' ).obj, today, '`max` using `true`: ' + today )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
// Using `false`
picker.set( 'max', false )
deepEqual( picker.get( 'max' ).obj, Infinity, '`max` using `false`: ' + Infinity )
deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )
deepEqual( picker.get( 'select' ), null, '`select` unaffected' )
deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )
deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )
strictEqual( picker.get( 'value' ), '', '`value` unaffected' )
deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )
})
test( '`max` using strings', function() {
var picker = this.picker
var max = picker.get('max')
strictEqual( max.pick, Infinity, 'No `max` date' )
picker.set( 'max', '8 January, 2013' )
max = picker.get('max')
deepEqual( [max.year, max.month, max.date], [2013, 0, 8], '`max` updated' )
})
test( '`disable` and `enable` using integers', function() {
var today = new Date(),
disableCollection = [1,4,7],
picker = this.picker,
$root = picker.$root
today.setHours(0,0,0,0)
picker.set( 'disable', disableCollection )
if ( disableCollection.indexOf( today.getDay() + 1 ) > -1 ) {
notDeepEqual( picker.get( 'highlight' ), picker.get( 'now' ), 'Shifted disabled `highlight`: ' + picker.get( 'highlight' ).obj )
}
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )
$root.find( 'tr' ).each( function( indexRow, tableRow ) {
$( tableRow ).find( '[data-pick]' ).each( function( indexCell, tableCell ) {
if ( disableCollection.indexOf( indexCell + 1 ) > -1 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Disabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Enabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )
}
})
})
picker.set( 'enable', [1] )
deepEqual( picker.get( 'disable' ), [4,7], 'Disabled date removed from collection' )
$root.find( 'tr' ).each( function( indexRow, tableRow ) {
$( tableRow ).find( '[data-pick]' ).each( function( indexCell, tableCell ) {
if ( [4,7].indexOf( indexCell + 1 ) > -1 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Disabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Enabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )
}
})
})
picker.set( 'enable', 'flip' )
deepEqual( picker.get( 'disable' ), [4,7], 'Disabled collection `enable` flipped' )
strictEqual( picker.get( 'enable' ), -1, 'Inverted `enable`')
$root.find( 'tr' ).each( function( indexRow, tableRow ) {
$( tableRow ).find( '[data-pick]' ).each( function( indexCell, tableCell ) {
if ( [4,7].indexOf( indexCell + 1 ) < 0 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Disabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Enabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )
}
})
})
picker.set( 'disable', 'flip' )
deepEqual( picker.get( 'disable' ), [4,7], 'Disabled collection `disable` flipped' )
strictEqual( picker.get( 'enable' ), 1, 'Inverted back `enable`')
$root.find( 'tr' ).each( function( indexRow, tableRow ) {
$( tableRow ).find( '[data-pick]' ).each( function( indexCell, tableCell ) {
if ( [4,7].indexOf( indexCell + 1 ) > -1 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Disabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Enabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )
}
})
})
})
test( '`disable` and `enable` using arrays', function() {
var today = new Date(),
nowYear = today.getFullYear(),
nowMonth = today.getMonth(),
disableCollection = [ [nowYear,nowMonth,1],[nowYear,nowMonth,25],[nowYear,nowMonth,17] ],
picker = this.picker,
viewday = picker.get( 'view' ).day,
$root = picker.$root
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday + 1
if ( index === 1 || index === 17 || index === 25 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
picker.set( 'enable', [ [nowYear,nowMonth,17] ] )
disableCollection = [ [nowYear,nowMonth,1],[nowYear,nowMonth,25] ]
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled date removed from collection' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday + 1
if ( index === 1 || index === 25 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
picker.set( 'enable', 'flip' )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled collection `enable` flipped' )
deepEqual( picker.get( 'enable' ), -1, 'Base state disabled' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday + 1
if ( index !== 1 && index !== 25 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
picker.set( 'disable', 'flip' )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled collection `disable` flipped' )
deepEqual( picker.get( 'enable' ), 1, 'Base state enabled' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday + 1
if ( index === 1 || index === 25 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
})
test( '`disable` and `enable` using JS dates', function() {
var now = new Date(),
nowYear = now.getFullYear(),
nowMonth = now.getMonth(),
disableCollection = [ new Date(nowYear,nowMonth,1), new Date(nowYear,nowMonth,17), new Date(nowYear,nowMonth,25) ],
picker = this.picker,
viewday = picker.get( 'view' ).day,
$root = picker.$root
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday + 1
if ( index === 1 || index === 17 || index === 25 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
picker.set( 'enable', [ new Date(nowYear,nowMonth,17) ] )
deepEqual( picker.get( 'disable' ), [ new Date(nowYear,nowMonth,1), new Date(nowYear,nowMonth,25) ], 'Disabled date removed from collection' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday + 1
if ( index === 1 || index === 25 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
picker.set( 'enable', 'flip' )
deepEqual( picker.get( 'disable' ), [ new Date(nowYear,nowMonth,1), new Date(nowYear,nowMonth,25) ], 'Disabled collection `enable` flipped' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday + 1
if ( index !== 1 && index !== 25 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
picker.set( 'disable', 'flip' )
deepEqual( picker.get( 'disable' ), [ new Date(nowYear,nowMonth,1), new Date(nowYear,nowMonth,25) ], 'Disabled collection `disable` flipped' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday + 1
if ( index === 1 || index === 25 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
})
test( '`disable` and `enable` using booleans', function() {
var now = new Date(),
nowYear = now.getFullYear(),
nowMonth = now.getMonth(),
disableCollection = [ [nowYear,nowMonth,1],[nowYear,nowMonth,17],[nowYear,nowMonth,25] ],
picker = this.picker,
$root = picker.$root
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )
picker.set('disable', false)
deepEqual( picker.get('disable'), [], 'Disabled collection reset' )
strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 0, 'No dates disabled' )
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )
picker.set('disable', true)
deepEqual( picker.get('disable'), [], 'Disabled collection reset' )
deepEqual( picker.get('enable'), -1, 'Disabled collection `enable` flipped' )
strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 42, 'All dates disabled' )
picker.set( 'enable', 'flip' )
deepEqual( picker.get('enable'), 1, 'Disabled collection `enable` flipped' )
picker.set( 'disable', disableCollection )
deepEqual( picker.get('disable'), disableCollection, 'Disabled dates added to collection' )
picker.set('enable', true)
deepEqual( picker.get('disable'), [], 'Disabled collection reset' )
strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 0, 'No dates disabled' )
picker.set( 'disable', disableCollection )
deepEqual( picker.get('disable'), disableCollection, 'Disabled dates added to collection' )
picker.set('enable', false)
deepEqual( picker.get('disable'), [], 'Disabled collection reset' )
deepEqual( picker.get('enable'), -1, 'Disabled collection `enable` flipped' )
strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 42, 'All dates disabled' )
})
test( '`disable` and `enable` using ranges', function() {
var picker = this.picker,
$root = picker.$root,
disableCollection, viewday
picker.set( 'view', [2014,2,1] )
viewday = picker.get( 'view' ).day + 1
disableCollection = [ { from: [2014,2,4], to: [2014,2,14] } ]
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday
if ( index >= 2 && index <= 12 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
picker.set( 'enable', disableCollection )
deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )
strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 0, 'No dates disabled' )
disableCollection = [ { from: new Date(2014,2,7), to: new Date(2014,2,17) } ]
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range updated' )
$root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {
var index = indexCell - viewday
if ( index >= 5 && index <= 15 ) {
ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )
}
else {
ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )
}
})
picker.set( 'enable', disableCollection )
deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )
strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 0, 'No dates disabled' )
})
test( '`disable` and `enable` using relative ranges', function() {
var picker = this.picker,
$root = picker.$root,
today = picker.get( 'now' ).obj,
yearToday = today.getFullYear(),
monthToday = today.getMonth(),
dateToday = today.getDate(),
backDay = [ yearToday, monthToday, dateToday - 10 ],
forwardDay = new Date( yearToday, monthToday, dateToday + 10 ),
disableCollection, index, $dates, disabledDate, previousMonth
disableCollection = [ { from: true, to: forwardDay } ]
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to today with date object' )
$dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)
for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {
disabledDate = +$dates[index].innerHTML
disabledDate = new Date(yearToday, monthToday, disabledDate)
ok( disabledDate >= today &&
disabledDate <= new Date(yearToday, monthToday, dateToday + 10),
'Date is disabled: ' + disabledDate
);
}
picker.set( 'enable', disableCollection )
deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )
ok( !$root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 'No dates disabled' )
disableCollection = [ { from: backDay, to: true } ]
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to today with array' )
$dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)
for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {
disabledDate = +$dates[index].innerHTML
previousMonth = disabledDate > dateToday ? 1 : 0
disabledDate = new Date(yearToday, monthToday - previousMonth, disabledDate)
ok( disabledDate <= today &&
disabledDate >= new Date(yearToday, monthToday, dateToday - 10),
'Date is disabled: ' + disabledDate
);
}
picker.set( 'enable', disableCollection )
deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )
ok( !$root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 'No dates disabled' )
disableCollection = [ { from: true, to: 10 } ]
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to today with positive integer' )
$dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)
for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {
disabledDate = +$dates[index].innerHTML
disabledDate = new Date(yearToday, monthToday, disabledDate)
ok( disabledDate >= today &&
disabledDate <= new Date(yearToday, monthToday, dateToday + 10),
'Date is disabled: ' + disabledDate
);
}
picker.set( 'enable', disableCollection )
deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )
ok( !$root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 'No dates disabled' )
disableCollection = [ { from: -10, to: true } ]
picker.set( 'disable', disableCollection )
deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to today with negative integer' )
$dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)
for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {
disabledDate = +$dates[index].innerHTML
previousMonth = disabledDate > dateToday ? 1 : 0
disabledDate = new Date(yearToday, monthToday - previousMonth, disabledDate)
ok( disabledDate <= today &&
disabledDate >= new Date(yearToday, monthToday, dateToday - 10),
'Date is disabled: ' + disabledDate
);
}
})
test( '`disable` and `enable` using overlapping ranges', function() {
var picker = this.picker,
$root = picker.$root,
disableCollection
picker.set( 'view', [2014,2,1] )
picker.set( 'disable', [
{ from: [2014,2,4], to: [2014,2,28] }
])
picker.set( 'enable', [
{ from: [2014,2,14], to: [2014,2,18] }
])
disableCollection = [
{ from: [2014,2,4], to: [2014,2,28] },
{ from: [2014,2,14], to: [2014,2,18], inverted: true }
]
deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range within disabled range' )
$dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)
for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {
disabledDate = +$dates[index].innerHTML
ok( disabledDate >= 4 && disabledDate < 14 ||
disabledDate > 18 && disabledDate <= 28,
'Date is disabled: ' + disabledDate
);
}
picker.set( 'disable', false )
picker.set( 'disable', [
{ from: [2014,2,4], to: [2014,2,28] }
])
picker.set( 'enable', [
{ from: [2014,2,1], to: [2014,2,14] }
])
disableCollection = [
{ from: [2014,2,4], to: [2014,2,28] },
{ from: [2014,2,1], to: [2014,2,14], inverted: true }
]
deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range before and within disabled range' )
$dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)
for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {
disabledDate = +$dates[index].innerHTML
ok( disabledDate >= 14 && disabledDate <= 28,
'Date is disabled: ' + disabledDate
);
}
picker.set( 'disable', false )
picker.set( 'disable', [
{ from: [2014,2,4], to: [2014,2,20] }
])
picker.set( 'enable', [
{ from: [2014,2,16], to: [2014,2,24] }
])
disableCollection = [
{ from: [2014,2,4], to: [2014,2,20] },
{ from: [2014,2,16], to: [2014,2,24], inverted: true }
]
deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range after and within disabled range' )
$dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)
for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {
disabledDate = +$dates[index].innerHTML
ok( disabledDate >= 4 && disabledDate < 16,
'Date is disabled: ' + disabledDate
);
}
})
test( '`disable` and `enable` repeatedly', function() {
var now = new Date(2014,3,6),
nowYear = now.getFullYear(),
nowMonth = now.getMonth(),
nowDate = now.getDate(),
picker = this.picker,
disabledCollection = [
[nowYear,nowMonth,1],
[nowYear,nowMonth,17],
new Date(nowYear,nowMonth,25),
1,
{ from: [nowYear,nowMonth,4], to: [nowYear,nowMonth,10] },
{ from: [nowYear,nowMonth,8], to: [nowYear,nowMonth,12] }
],
collectionToEnable
picker.set( 'disable', disabledCollection )
picker.set( 'disable', disabledCollection )
deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection without duplicates' )
collectionToEnable = [
[nowYear,nowMonth,17],
[nowYear,nowMonth,25],
now,
{ from: [nowYear,nowMonth,8], to: [nowYear,nowMonth,12] }
]
picker.set( 'enable', collectionToEnable )
disabledCollection = [
[nowYear,nowMonth,1],
1,
{ from: [nowYear,nowMonth,4], to: [nowYear,nowMonth,10] },
[nowYear,nowMonth,nowDate,'inverted'],
{ from: [nowYear,nowMonth,8], to: [nowYear,nowMonth,12], inverted: true }
]
deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection enabled various values' )
picker.set( 'enable', collectionToEnable )
deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection without duplicates' )
collectionToEnable = disabledCollection
picker.set( 'enable', collectionToEnable )
deepEqual( picker.get( 'disable' ), [], 'Collection cleared - including inverted range overlaps' )
picker.set( 'enable', collectionToEnable )
deepEqual( picker.get( 'disable' ), [], 'Collection kept clear' )
})
module( 'Date picker `set` beyond limits', {
setup: function() {
$DOM.append( $INPUT.clone() )
var $input = $DOM.find( 'input' ).pickadate({
min: -40,
max: 40
})
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( '`select`', function() {
var picker = this.picker,
today = new Date()
today.setHours(0,0,0,0)
picker.set( 'select', new Date( today.getFullYear(), today.getMonth(), today.getDate() - 60 ) )
deepEqual( picker.get( 'select' ), picker.get( 'min' ), 'Able to not `select` beyond lower limit' )
picker.set( 'select', new Date( today.getFullYear(), today.getMonth(), today.getDate() + 60 ) )
deepEqual( picker.get( 'select' ), picker.get( 'max' ), 'Able to not `select` beyond upper limit' )
})
test( '`highlight`', function() {
var picker = this.picker,
today = new Date()
today.setHours(0,0,0,0)
picker.set( 'highlight', new Date( today.getFullYear(), today.getMonth(), today.getDate() - 60 ) )
deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), 'Able to not `highlight` beyond lower limit' )
picker.set( 'highlight', new Date( today.getFullYear(), today.getMonth(), today.getDate() + 60 ) )
deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), 'Able to not `highlight` beyond upper limit' )
})
test( '`view`', function() {
var picker = this.picker,
today = new Date(),
viewset,
min = picker.get( 'min' ),
max = picker.get( 'max' )
today.setHours(0,0,0,0)
picker.set( 'view', new Date( today.getFullYear(), today.getMonth(), today.getDate() - 60 ) )
viewset = picker.get( 'view' )
deepEqual( [viewset.year,viewset.month,viewset.date], [min.year,min.month,1], 'Able to not `view` beyond lower limit' )
picker.set( 'view', new Date( today.getFullYear(), today.getMonth(), today.getDate() + 60 ) )
viewset = picker.get( 'view' )
deepEqual( [viewset.year,viewset.month,viewset.date], [max.year,max.month,1], 'Able to not `view` beyond upper limit' )
})
module( 'Date picker mouse events', {
setup: function() {
$DOM.append( $INPUT.clone() )
var $input = $DOM.find( 'input' ).pickadate()
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( 'Select', function() {
var picker = this.picker,
$root = picker.$root,
viewsetObject = picker.get( 'view' ),
monthStartDay = viewsetObject.day,
monthEndDate = new Date( viewsetObject.year, viewsetObject.month + 1, 0 ).getDate()
for ( var i = monthStartDay; i < monthStartDay + monthEndDate; i += 1 ) {
$root.find( '.' + $.fn.pickadate.defaults.klass.day ).eq( i ).click()
strictEqual( picker.get( 'select' ).pick, new Date( viewsetObject.year, viewsetObject.month, viewsetObject.date + i - monthStartDay ).getTime(), 'Selected ' + picker.get( 'select', 'yyyy/mm/dd' ) )
strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), 'Input value updated to ' + picker.get( 'value' ) )
}
})
test( 'Highlight', function() {
var picker = this.picker,
$root = picker.$root,
today = new Date(),
playdate = new Date()
today.setHours(0,0,0,0)
playdate.setHours(0,0,0,0)
$root.find( '.' + $.fn.pickadate.defaults.klass.navPrev ).click()
playdate.setMonth( playdate.getMonth() - 1 )
deepEqual( picker.get( 'highlight' ).obj, playdate, 'Previous month: ' + playdate )
deepEqual( picker.get( 'select' ), null, 'Select unaffected' )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, 'View updated' )
$root.find( '.' + $.fn.pickadate.defaults.klass.navNext ).click()
$root.find( '.' + $.fn.pickadate.defaults.klass.navNext ).click()
playdate.setMonth( today.getMonth() + 1 )
playdate = new Date(today.getFullYear(), today.getMonth() + 1, today.getDate())
while ( playdate.getMonth() > today.getMonth() + 1 ) {
playdate = new Date(playdate.getFullYear(), playdate.getMonth(), playdate.getDate() - 1)
}
deepEqual( picker.get( 'highlight' ).obj, playdate, 'Next month: ' + playdate )
deepEqual( picker.get( 'select' ), null, 'Select unaffected' )
playdate.setDate( 1 )
deepEqual( picker.get( 'view' ).obj, playdate, 'View updated' )
})
test( 'Today', function() {
var picker = this.picker
picker.open()
picker.$root.find( '.' + $.fn.pickadate.defaults.klass.buttonToday ).click()
strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), 'Value set to today' )
})
test( 'Clear', function() {
var picker = this.picker
picker.open()
picker.set( 'select', new Date() )
strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), 'Value updated' )
picker.$root.find( '.' + $.fn.pickadate.defaults.klass.buttonClear ).click()
strictEqual( picker.get( 'value' ), '', 'Value cleared' )
})
test( 'Closes upon selection', function() {
var picker = this.picker
picker.open()
ok( picker.get('open'), 'Opened to start off' )
picker.$holder.find('[data-pick]').click()
ok( !picker.get('open'), 'Closed after selection' )
})
test( 'Closes upon clearing', function() {
var picker = this.picker
picker.open()
ok( picker.get('open'), 'Opened to start off' )
picker.$holder.find('[data-clear]').click()
ok( !picker.get('open'), 'Closed after clearing' )
})
module( 'Date picker mouse events', {
setup: function() {
$DOM.append( $INPUT.clone() )
var $input = $DOM.find( 'input' ).pickadate({
closeOnSelect: false,
closeOnClear: false
})
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( 'Remains open upon selection with option', function() {
var picker = this.picker
picker.open()
ok( picker.get('open'), 'Opened to start off' )
picker.$holder.find('[data-pick]').click()
ok( picker.get('open'), 'Remains open after selection' )
})
test( 'Closes upon clearing', function() {
var picker = this.picker
picker.open()
ok( picker.get('open'), 'Opened to start off' )
picker.$holder.find('[data-clear]').click()
ok( picker.get('open'), 'Remains open after clearing' )
})
module( 'Date picker keyboard events', {
setup: function() {
$DOM.append( $INPUT.clone() )
var $input = $DOM.find( 'input' ).pickadate()
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( 'Select', function() {
var picker = this.picker,
$input = picker.$holder,
playdate = new Date()
playdate.setHours(0,0,0,0)
for ( var i = 0; i < 10; i += 1 ) {
// Open the picker.
picker.open()
// Update the playdate.
playdate.setDate( playdate.getDate() + 10 )
// Set the highlight.
picker.set( 'highlight', playdate )
// Keydown to select the highlighted item.
$input.trigger({ type: 'keydown', keyCode: 13 })
// Check if the select is the same as the highlight.
deepEqual( picker.get( 'select' ), picker.get( 'highlight' ), 'Select updated to: ' + picker.get( 'select' ).obj )
}
})
test( 'Highlight', function() {
var picker = this.picker,
$input = picker.$holder,
playdate = new Date()
// Open the picker
picker.open()
// Down
for ( var i = 0; i < 10; i += 1 ) {
$input.trigger({ type: 'keydown', keyCode: 40 })
playdate.setDate( playdate.getDate() + 7 )
strictEqual( picker.get( 'highlight' ).date, playdate.getDate(), 'Keyed "down" to: ' + picker.get( 'highlight', 'yyyy/mm/dd' ) )
strictEqual( picker.get( 'view' ).month, picker.get( 'highlight' ).month, 'Updated "view" to: ' + picker.get( 'view', 'yyyy/mm/dd' ) )
}
// Up
for ( var j = 0; j < 10; j += 1 ) {
$input.trigger({ type: 'keydown', keyCode: 38 })
playdate.setDate( playdate.getDate() - 7 )
strictEqual( picker.get( 'highlight' ).date, playdate.getDate(), 'Keyed "up" to: ' + picker.get( 'highlight', 'yyyy/mm/dd' ) )
strictEqual( picker.get( 'view' ).month, picker.get( 'highlight' ).month, 'Updated "view" to: ' + picker.get( 'view', 'yyyy/mm/dd' ) )
}
// Left
for ( var k = 0; k < 10; k += 1 ) {
$input.trigger({ type: 'keydown', keyCode: 37 })
playdate.setDate( playdate.getDate() - 1 )
ok( picker.get( 'highlight' ).date === playdate.getDate() && picker.get( 'highlight' ).day === playdate.getDay(), 'Keyed "left" to: ' + picker.get( 'highlight', 'yyyy/mm/dd' ) )
strictEqual( picker.get( 'view' ).month, picker.get( 'highlight' ).month, 'Updated "view" to: ' + picker.get( 'view', 'yyyy/mm/dd' ) )
}
// Right
for ( var l = 0; l < 10; l += 1 ) {
$input.trigger({ type: 'keydown', keyCode: 39 })
playdate.setDate( playdate.getDate() + 1 )
ok( picker.get( 'highlight' ).date === playdate.getDate() && picker.get( 'highlight' ).day === playdate.getDay(), 'Keyed "right" to: ' + picker.get( 'highlight', 'yyyy/mm/dd' ) )
strictEqual( picker.get( 'view' ).month, picker.get( 'highlight' ).month, 'Updated "view" to: ' + picker.get( 'view', 'yyyy/mm/dd' ) )
}
})
test( 'Closes upon selection', function() {
var picker = this.picker
picker.open()
ok( picker.get('open'), 'Opened to start off' )
picker.$holder.find('[data-pick]').focus()
picker.$holder.trigger({ type: 'keydown', keyCode: 13 })
ok( !picker.get('open'), 'Closed after selection' )
})
test( 'Closes upon clearing', function() {
var picker = this.picker
picker.open()
ok( picker.get('open'), 'Opened to start off' )
picker.$holder.find('[data-clear]').focus()
picker.$holder.trigger({ type: 'keydown', keyCode: 13 })
ok( !picker.get('open'), 'Closed after clearing' )
})
module( 'Date picker keyboard events', {
setup: function() {
$DOM.append( $INPUT.clone() )
var $input = $DOM.find( 'input' ).pickadate({
closeOnSelect: false,
closeOnClear: false
})
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( 'Remains open upon selection with option', function() {
var picker = this.picker
picker.open()
ok( picker.get('open'), 'Opened to start off' )
picker.$holder.find('[data-pick]').focus()
picker.$holder.trigger({ type: 'keydown', keyCode: 13 })
ok( picker.get('open'), 'Remains open after selection' )
})
test( 'Closes upon clearing', function() {
var picker = this.picker
picker.open()
ok( picker.get('open'), 'Opened to start off' )
picker.$holder.find('[data-clear]').focus()
picker.$holder.trigger({ type: 'keydown', keyCode: 13 })
ok( picker.get('open'), 'Remains open after clearing' )
})
module( 'Date picker with a visible value', {
setup: function() {
$DOM.append( $INPUT.clone().val( '14 August, 1988' ) )
var $input = $DOM.find( 'input' ).pickadate()
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( '`value` to select, highlight, and view', function() {
var picker = this.picker
ok( !picker._hidden, 'No hidden input' )
deepEqual( picker.get( 'select' ).obj, new Date(1988,7,14), 'Selects date' )
deepEqual( picker.get( 'highlight' ).obj, new Date(1988,7,14), 'Highlights date' )
deepEqual( picker.get( 'view' ).obj, new Date(1988,7,1), 'Viewsets date' )
})
module( 'Date picker with a simple format', {
setup: function() {
$DOM.append( $INPUT.clone().val( '1988-08-14' ) )
var $input = $DOM.find( 'input' ).pickadate({
format: 'yyyy-mm-dd'
})
this.picker = $input.pickadate( 'picker' )
},
teardown: function() {
this.picker.stop()
$DOM.empty()
}
})
test( '`value` to select, highlight, and view', function() {
var picker = this.picker
ok( !picker._hidden, 'No hidden input' )
deepEqual( picker.get( 'select' ).obj, new Date(1988,7,14), 'Selects date' )
deepEqual( picker.get( 'highlight' ).obj, new Date(1988,7,14), 'Highlights date' )
deepEqual( picker.get( 'view' ).obj, new Date(1988,7,1), 'Viewsets date' )
})
module( 'Date picker with a hidden value', {
teardown: function() {
$DOM.empty()
}
})
test( '`value` to select, highlight, and view', function() {
$DOM.append( $INPUT.clone().val( '14 August, 1988' ) )
var $input = $DOM.find( 'input' ).pickadate({
formatSubmit: 'yyyy/mm/dd'
})
var picker = $input.pickadate( 'picker' )
ok( picker._hidden, 'Has hidden input' )
strictEqual( picker._hidden.value, '1988/08/14', 'Hidden input value' )
deepEqual( picker.get( 'select' ).obj, new Date(1988,7,14), 'Selects date' )
deepEqual( picker.get( 'highlight' ).obj, new Date(1988,7,14), 'Highlights date' )
deepEqual( picker.get( 'view' ).obj, new Date(1988,7,1), 'Viewsets date' )
})
test( '`data-value` to select, highlight, and view', function() {
$DOM.append( $INPUT.clone().data( 'value', '1988/08/14' ) )
var $input = $DOM.find( 'input' ).pickadate({
formatSubmit: 'yyyy/mm/dd'
})
var picker = $input.pickadate( 'picker' )
ok( picker._hidden, 'Has hidden input' )
strictEqual( picker._hidden.value, '1988/08/14', 'Hidden input value' )
deepEqual( picker.get( 'select' ).obj, new Date(1988,7,14), 'Selects date' )
deepEqual( picker.get( 'highlight' ).obj, new Date(1988,7,14), 'Highlights date' )
deepEqual( picker.get( 'view' ).obj, new Date(1988,7,1), 'Viewsets date' )
})
test( 'the pre-filled `value` selected is no longer "active"', function() {
var $input = $( '' ).pickadate({
formatSubmit: 'yyyy/mm/dd',
min: [2015, 7, 14]
})
var picker = $input.pickadate( 'picker' )
strictEqual( picker.get( 'value' ), '14 August, 2014', 'Sets the default value' )
strictEqual( picker.get( 'valueSubmit' ), '2014/08/14', 'Sets the default value to submit' )
var select = picker.get('select')
deepEqual( [select.year, select.month, select.date], [2014, 7, 14], 'Sets the default select' )
})