module('Options', { setup: function(){}, teardown: function(){ $('#qunit-fixture *').each(function(){ var t = $(this); if ('datepicker' in t.data()) t.datepicker('remove'); }); } }); test('Autoclose', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', autoclose: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.is(':visible'), 'Picker is visible'); target = picker.find('.datepicker-days tbody td:nth(7)'); equal(target.text(), '4'); // Mar 4 target.click(); ok(picker.is(':not(:visible)'), 'Picker is hidden'); datesEqual(dp.dates[0], UTCDate(2012, 2, 4)); datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); }); test('Custom date formatter functions', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2015-09-18T00:00:00.000Z') .datepicker({ format: { /* Say our UI should display a week ahead, but textbox should store the actual date. This is useful if we need UI to select local dates, but store in UTC */ toDisplay: function (date, format, language) { var d = new Date(date); d.setDate(d.getDate() - 7); return d.toISOString(); }, toValue: function (date, format, language) { var d = new Date(date); d.setDate(d.getDate() + 7); return new Date(d); } }, autoclose: true }), dp = input.data('datepicker'), picker = dp.picker, target; //Value is ISO format and is 7 days older than UI equal(input.val(), '2015-09-18T00:00:00.000Z'); datesEqual(dp.dates[0], UTCDate(2015, 8, 25)); datesEqual(dp.viewDate, UTCDate(2015, 8, 25)); input.focus(); ok(picker.is(':visible'), 'Picker is visible'); target = picker.find('.datepicker-days tbody td:nth(5)'); equal(target.text(), '4'); // Sep 4 target.click(); ok(picker.is(':not(:visible)'), 'Picker is hidden'); //Value is now 28th Aug 2015 in ISO format //and is 7 days older than UI equal(input.val(), '2015-08-28T00:00:00.000Z'); datesEqual(dp.dates[0], UTCDate(2015, 8, 4)); datesEqual(dp.viewDate, UTCDate(2015, 8, 4)); }); test('Startview: year view (integer)', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: 1 }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible'); ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); }); test('Startview: year view (string)', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: 'year' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible'); ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); }); test('Startview: decade view (integer)', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: 2 }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); }); test('Startview: decade view (string)', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: 'decade' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); }); test('Startview: century view (integer)', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: 3 }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); ok(picker.find('.datepicker-decades').is(':visible'), 'Decades view visible'); ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); }); test('Startview: century view (string)', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: 'century' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); ok(picker.find('.datepicker-decades').is(':visible'), 'Decades view visible'); ok(picker.find('.datepicker-centuries').is(':not(:visible)'), 'Centuries view hidden'); }); test('Startview: millennium view (integer)', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: 4 }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); ok(picker.find('.datepicker-centuries').is(':visible'), 'Centuries view visible'); }); test('Startview: millennium view (string)', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: 'millennium' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); ok(picker.find('.datepicker-years').is(':not(:visible)'), 'Years view hidden'); ok(picker.find('.datepicker-decades').is(':not(:visible)'), 'Decades view hidden'); ok(picker.find('.datepicker-centuries').is(':visible'), 'Centuries view visible'); }); test('Today Button: today button not default', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible'); }); test('Today Button: today visibility when enabled', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', todayBtn: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); picker.find('.datepicker-days thead th.datepicker-switch').click(); ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible'); ok(picker.find('.datepicker-months tfoot .today').is(':visible'), 'Today button visible'); picker.find('.datepicker-months thead th.datepicker-switch').click(); ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible'); }); test('Today Button: data-api', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); }); test('Today Button: moves to today\'s date', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', todayBtn: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); target = picker.find('.datepicker-days tfoot .today'); target.click(); var d = new Date(), today = UTCDate(d.getFullYear(), d.getMonth(), d.getDate()); datesEqual(dp.viewDate, today); datesEqual(dp.dates[0], UTCDate(2012, 2, 5)); }); test('Today Button: moves to days view', function(){ var viewModes = $.fn.datepicker.DPGlobal.viewModes; var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', startView: viewModes.length - 1, todayBtn: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('tfoot .today').filter(':visible'); target.click(); ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); }); test('Today Button: "linked" selects today\'s date', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', todayBtn: "linked" }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible'); target = picker.find('.datepicker-days tfoot .today'); target.click(); var d = new Date(), today = UTCDate(d.getFullYear(), d.getMonth(), d.getDate()); datesEqual(dp.viewDate, today); datesEqual(dp.dates[0], today); }); test('Today Highlight: today\'s date is not highlighted by default', patch_date(function(Date){ Date.now = UTCDate(2012, 2, 15); var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'March 2012', 'Title is "March 2012"'); target = picker.find('.datepicker-days tbody td:contains(15)'); ok(!target.hasClass('today'), 'Today is not marked with "today" class'); target = picker.find('.datepicker-days tbody td:contains(14)'); ok(!target.hasClass('today'), 'Yesterday is not marked with "today" class'); target = picker.find('.datepicker-days tbody td:contains(16)'); ok(!target.hasClass('today'), 'Tomorrow is not marked with "today" class'); })); test('Today Highlight: today\'s date is highlighted when not active', patch_date(function(Date){ Date.now = new Date(2012, 2, 15); var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', todayHighlight: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'March 2012', 'Title is "March 2012"'); target = picker.find('.datepicker-days tbody td:contains(15)'); ok(target.hasClass('today'), 'Today is marked with "today" class'); target = picker.find('.datepicker-days tbody td:contains(14)'); ok(!target.hasClass('today'), 'Yesterday is not marked with "today" class'); target = picker.find('.datepicker-days tbody td:contains(16)'); ok(!target.hasClass('today'), 'Tomorrow is not marked with "today" class'); })); test('Clear Button: clear visibility when enabled', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', clearBtn: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); ok(picker.find('.datepicker-days tfoot .clear').is(':visible'), 'Clear button visible'); picker.find('.datepicker-days thead th.datepicker-switch').click(); ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible'); ok(picker.find('.datepicker-months tfoot .clear').is(':visible'), 'Clear button visible'); picker.find('.datepicker-months thead th.datepicker-switch').click(); ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); ok(picker.find('.datepicker-years tfoot .clear').is(':visible'), 'Clear button visible'); }); test('Clear Button: clears input value', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', clearBtn: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); ok(picker.find('.datepicker-days tfoot .clear').is(':visible'), 'Today button visible'); target = picker.find('.datepicker-days tfoot .clear'); target.click(); equal(input.val(),'',"Input value has been cleared."); ok(picker.is(':visible'), 'Picker is visible'); }); test('Clear Button: hides datepicker if autoclose is on', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', clearBtn: true, autoclose: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible'); ok(picker.find('.datepicker-days tfoot .clear').is(':visible'), 'Today button visible'); target = picker.find('.datepicker-days tfoot .clear'); target.click(); equal(input.val(),'',"Input value has been cleared."); ok(picker.is(':not(:visible)'), 'Picker is hidden'); }); test('Active Toggle Default: when active date is selected it is not unset', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd' }), dp = input.data('datepicker'), picker = dp.picker, target; // open our datepicker input.focus(); // Initial value is selected ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 selected'); // click on our active date target = picker.find('.datepicker-days .day.active'); target.click(); // make sure it's still set equal(input.val(), '2012-03-05', "Input value has not been cleared."); }); test('Active Toggle Enabled (single date): when active date is selected it is unset', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', toggleActive: true }), dp = input.data('datepicker'), picker = dp.picker, target; // open our datepicker input.focus(); // Initial value is selected ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 selected'); // click on our active date target = picker.find('.datepicker-days .day.active'); target.click(); // make sure it's no longer set equal(input.val(), '', "Input value has been cleared."); }); test('Active Toggle Multidate Default: when one of the active dates is selected it is unset', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', multidate: true }), dp = input.data('datepicker'), picker = dp.picker, target; // open our datepicker input.focus(); // Initial value is selected ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 in dates'); // Select additional date target = picker.find('.datepicker-days tbody td:nth(7)'); target.click(); datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 4), '2012-03-04 in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); equal(input.val(), '2012-03-05,2012-03-04'); // Unselect additional date target = picker.find('.datepicker-days tbody td:nth(7)'); target.click(); ok(dp.dates.contains(UTCDate(2012, 2, 4)) === -1, '2012-03-04 no longer in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); equal(input.val(), '2012-03-05'); }); test('Active Toggle Disabled: when active date is selected it remains', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', toggleActive: false }), dp = input.data('datepicker'), picker = dp.picker, target; // open our datepicker input.focus(); // Initial value is selected ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 selected'); // click on our active date target = picker.find('.datepicker-days .day.active'); target.click(); // make sure it's still set ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 still selected'); datesEqual(dp.viewDate, UTCDate(2012, 2, 5)); equal(input.val(), '2012-03-05'); }); test('Active Toggle Multidate Disabled: when activeToggle is set to false, but multidate is set, the option is ignored and selecting an active date it is unset', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', multidate: true, toggleActive: false }), dp = input.data('datepicker'), picker = dp.picker, target; // open our datepicker input.focus(); // Initial value is selected ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 in dates'); // Select additional date target = picker.find('.datepicker-days tbody td:nth(7)'); target.click(); datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 4), '2012-03-04 in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); equal(input.val(), '2012-03-05,2012-03-04'); // Unselect additional date target = picker.find('.datepicker-days tbody td:nth(7)'); target.click(); ok(dp.dates.contains(UTCDate(2012, 2, 4)) === -1, '2012-03-04 no longer in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); equal(input.val(), '2012-03-05'); }); test('DaysOfWeekDisabled', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', daysOfWeekDisabled: '1,5' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-days tbody td:nth(22)'); ok(target.hasClass('disabled'), 'Day of week is disabled'); target = picker.find('.datepicker-days tbody td:nth(24)'); ok(!target.hasClass('disabled'), 'Day of week is enabled'); target = picker.find('.datepicker-days tbody td:nth(26)'); ok(target.hasClass('disabled'), 'Day of week is disabled'); }); test('DaysOfWeekHighlighted', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', startDate: '2012-10-02', daysOfWeekHighlighted: '1,5' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-days tbody td:nth(0)'); ok(!target.hasClass('highlighted'), 'Day of week is not highlighted'); target = picker.find('.datepicker-days tbody td:nth(22)'); ok(target.hasClass('highlighted'), 'Day of week is highlighted'); target = picker.find('.datepicker-days tbody td:nth(24)'); ok(!target.hasClass('highlighted'), 'Day of week is not highlighted'); target = picker.find('.datepicker-days tbody td:nth(26)'); ok(target.hasClass('highlighted'), 'Day of week is highlighted'); }); test('DatesDisabled', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', datesDisabled: ['2012-10-1', '2012-10-10', '2012-10-20'] }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-days tbody td:nth(1)'); ok(target.hasClass('disabled'), 'Day of week is disabled'); ok(target.hasClass('disabled-date'), 'Date is disabled'); target = picker.find('.datepicker-days tbody td:nth(2)'); ok(!target.hasClass('disabled'), 'Day of week is enabled'); target = picker.find('.datepicker-days tbody td:nth(10)'); ok(target.hasClass('disabled'), 'Day of week is disabled'); ok(target.hasClass('disabled-date'), 'Date is disabled'); target = picker.find('.datepicker-days tbody td:nth(11)'); ok(!target.hasClass('disabled'), 'Day of week is enabled'); target = picker.find('.datepicker-days tbody td:nth(20)'); ok(target.hasClass('disabled'), 'Day of week is disabled'); ok(target.hasClass('disabled-date'), 'Date is disabled'); target = picker.find('.datepicker-days tbody td:nth(21)'); ok(!target.hasClass('disabled'), 'Day of week is enabled'); }); test('DatesDisabled as attribute', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-days tbody td:nth(1)'); ok(target.hasClass('disabled'), 'Day of week is disabled'); ok(target.hasClass('disabled-date'), 'Date is disabled'); target = picker.find('.datepicker-days tbody td:nth(2)'); ok(!target.hasClass('disabled'), 'Day of week is enabled'); target = picker.find('.datepicker-days tbody td:nth(10)'); ok(target.hasClass('disabled'), 'Day of week is disabled'); ok(target.hasClass('disabled-date'), 'Date is disabled'); target = picker.find('.datepicker-days tbody td:nth(11)'); ok(!target.hasClass('disabled'), 'Day of week is enabled'); target = picker.find('.datepicker-days tbody td:nth(20)'); ok(target.hasClass('disabled'), 'Day of week is disabled'); ok(target.hasClass('disabled-date'), 'Date is disabled'); target = picker.find('.datepicker-days tbody td:nth(21)'); ok(!target.hasClass('disabled'), 'Day of week is enabled'); }); test('BeforeShowDay', function(){ var beforeShowDay = function(date) { switch (date.getDate()){ case 25: return { tooltip: 'Example tooltip', classes: 'active' }; case 26: return "test26"; case 27: return {enabled: false, classes: 'test27'}; case 28: return false; case 30: return { content: "foo" + date.getDate() } } }; var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', beforeShowDay: beforeShowDay }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-days tbody td:nth(25)'); equal(target.attr('title'), 'Example tooltip', '25th has tooltip'); ok(!target.hasClass('disabled'), '25th is enabled'); target = picker.find('.datepicker-days tbody td:nth(26)'); ok(target.hasClass('test26'), '26th has test26 class'); ok(!target.hasClass('disabled'), '26th is enabled'); target = picker.find('.datepicker-days tbody td:nth(27)'); ok(target.hasClass('test27'), '27th has test27 class'); ok(target.hasClass('disabled'), '27th is disabled'); target = picker.find('.datepicker-days tbody td:nth(28)'); ok(target.hasClass('disabled'), '28th is disabled'); target = picker.find('.datepicker-days tbody td:nth(29)'); ok(!target.hasClass('disabled'), '29th is enabled'); target = picker.find('.datepicker-days tbody td:nth(30)'); ok(target.text() == "foo30", '30th has custom content'); }); test('BeforeShowMonth regress .day content', function() { var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', beforeShowDay: function(date) { return { content: 'foo123' }; } }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-days tbody td:nth(30)'); target.trigger('click'); datesEqual(dp.viewDate, UTCDate(2012, 9, 30)); }); test('BeforeShowMonth', function () { var beforeShowMonth = function (date) { switch (date.getMonth()) { case 0: return { tooltip: 'Example tooltip', classes: 'active' }; case 2: return "testMarch"; case 4: return {enabled: false, classes: 'testMay'}; case 5: return false; } }; var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', beforeShowMonth: beforeShowMonth }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-months tbody span:nth(0)'); equal(target.attr('title'), 'Example tooltip', '1st has tooltip'); ok(!target.hasClass('disabled'), 'January is enabled'); target = picker.find('.datepicker-months tbody span:nth(2)'); ok(target.hasClass('testMarch'), 'March has testMarch class'); ok(!target.hasClass('disabled'), 'March enabled'); target = picker.find('.datepicker-months tbody span:nth(4)'); ok(target.hasClass('testMay'), 'May has testMay class'); ok(target.hasClass('disabled'), 'May is disabled'); target = picker.find('.datepicker-months tbody span:nth(5)'); ok(target.hasClass('disabled'), 'June is disabled'); target = picker.find('.datepicker-months tbody span:nth(6)'); ok(!target.hasClass('disabled'), 'July is enabled'); }); test('BeforeShowYear', function () { var beforeShowYear = function (date) { switch (date.getFullYear()) { case 2013: return { tooltip: 'Example tooltip', classes: 'active' }; case 2014: return "test2014"; case 2015: return {enabled: false, classes: 'test2015'}; case 2016: return false; } }; var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', beforeShowYear: beforeShowYear }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-years tbody span:nth(4)'); equal(target.attr('title'), 'Example tooltip', '5th has tooltip'); ok(!target.hasClass('disabled'), '2013, 5th is enabled'); target = picker.find('.datepicker-years tbody span:nth(5)'); ok(target.hasClass('test2014'), '6th has test2014 class'); ok(!target.hasClass('disabled'), '2014, 6th is enabled'); target = picker.find('.datepicker-years tbody span:nth(6)'); ok(target.hasClass('test2015'), '2015, 7th has test2015 class'); ok(target.hasClass('disabled'), '2015, 7th is disabled'); target = picker.find('.datepicker-years tbody span:nth(7)'); ok(target.hasClass('disabled'), '2016, 8th is disabled'); target = picker.find('.datepicker-years tbody span:nth(8)'); ok(!target.hasClass('disabled'), '2017, 9th is enabled'); }); test('beforeShowDecade', function () { var beforeShowDecade = function (date) { switch (date.getFullYear()) { case 2030: return { tooltip: 'Example tooltip', classes: 'active' }; case 2040: return "test2040"; case 2050: return {enabled: false, classes: 'test2050'}; case 2060: return false; } }; var input = $('') .appendTo('#qunit-fixture') .val('03/05/2012') .datepicker({ beforeShowDecade: beforeShowDecade }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-decades tbody span:nth(4)'); equal(target.attr('title'), 'Example tooltip', '5th has tooltip'); ok(!target.hasClass('disabled'), '2030, 5th is enabled'); target = picker.find('.datepicker-decades tbody span:nth(5)'); ok(target.hasClass('test2040'), '6th has test2040 class'); ok(!target.hasClass('disabled'), '2040, 6th is enabled'); target = picker.find('.datepicker-decades tbody span:nth(6)'); ok(target.hasClass('test2050'), '2050, 7th has test2050 class'); ok(target.hasClass('disabled'), '2050, 7th is disabled'); target = picker.find('.datepicker-decades tbody span:nth(7)'); ok(target.hasClass('disabled'), '2060, 8th is disabled'); target = picker.find('.datepicker-decades tbody span:nth(8)'); ok(!target.hasClass('disabled'), '2070, 9th is enabled'); }); test('beforeShowCentury', function () { var beforeShowCentury = function (date) { switch (date.getFullYear()) { case 2300: return { tooltip: 'Example tooltip', classes: 'active' }; case 2400: return "test2400"; case 2500: return {enabled: false, classes: 'test2500'}; case 2600: return false; } }; var input = $('') .appendTo('#qunit-fixture') .val('03/05/2012') .datepicker({ beforeShowCentury: beforeShowCentury }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-centuries tbody span:nth(4)'); equal(target.attr('title'), 'Example tooltip', '5th has tooltip'); ok(!target.hasClass('disabled'), '2300, 5th is enabled'); target = picker.find('.datepicker-centuries tbody span:nth(5)'); ok(target.hasClass('test2400'), '6th has test2400 class'); ok(!target.hasClass('disabled'), '2400, 6th is enabled'); target = picker.find('.datepicker-centuries tbody span:nth(6)'); ok(target.hasClass('test2500'), '2500, 7th has test2500 class'); ok(target.hasClass('disabled'), '2500, 7th is disabled'); target = picker.find('.datepicker-centuries tbody span:nth(7)'); ok(target.hasClass('disabled'), '2600, 8th is disabled'); target = picker.find('.datepicker-centuries tbody span:nth(8)'); ok(!target.hasClass('disabled'), '2700, 9th is enabled'); }); test('Orientation: values are parsed correctly', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd' }), dp = input.data('datepicker'); equal(dp.o.orientation.x, 'auto'); equal(dp.o.orientation.y, 'auto'); dp._process_options({orientation: ''}); equal(dp.o.orientation.x, 'auto', 'Empty value'); equal(dp.o.orientation.y, 'auto', 'Empty value'); dp._process_options({orientation: 'left'}); equal(dp.o.orientation.x, 'left', '"left"'); equal(dp.o.orientation.y, 'auto', '"left"'); dp._process_options({orientation: 'right'}); equal(dp.o.orientation.x, 'right', '"right"'); equal(dp.o.orientation.y, 'auto', '"right"'); dp._process_options({orientation: 'top'}); equal(dp.o.orientation.x, 'auto', '"top"'); equal(dp.o.orientation.y, 'top', '"top"'); dp._process_options({orientation: 'bottom'}); equal(dp.o.orientation.x, 'auto', '"bottom"'); equal(dp.o.orientation.y, 'bottom', '"bottom"'); dp._process_options({orientation: 'left top'}); equal(dp.o.orientation.x, 'left', '"left top"'); equal(dp.o.orientation.y, 'top', '"left top"'); dp._process_options({orientation: 'left bottom'}); equal(dp.o.orientation.x, 'left', '"left bottom"'); equal(dp.o.orientation.y, 'bottom', '"left bottom"'); dp._process_options({orientation: 'right top'}); equal(dp.o.orientation.x, 'right', '"right top"'); equal(dp.o.orientation.y, 'top', '"right top"'); dp._process_options({orientation: 'right bottom'}); equal(dp.o.orientation.x, 'right', '"right bottom"'); equal(dp.o.orientation.y, 'bottom', '"right bottom"'); dp._process_options({orientation: 'left right'}); equal(dp.o.orientation.x, 'left', '"left right"'); equal(dp.o.orientation.y, 'auto', '"left right"'); dp._process_options({orientation: 'right left'}); equal(dp.o.orientation.x, 'right', '"right left"'); equal(dp.o.orientation.y, 'auto', '"right left"'); dp._process_options({orientation: 'top bottom'}); equal(dp.o.orientation.x, 'auto', '"top bottom"'); equal(dp.o.orientation.y, 'top', '"top bottom"'); dp._process_options({orientation: 'bottom top'}); equal(dp.o.orientation.x, 'auto', '"bottom top"'); equal(dp.o.orientation.y, 'bottom', '"bottom top"'); dp._process_options({orientation: 'foo bar'}); equal(dp.o.orientation.x, 'auto', '"foo bar"'); equal(dp.o.orientation.y, 'auto', '"foo bar"'); dp._process_options({orientation: 'foo left'}); equal(dp.o.orientation.x, 'left', '"foo left"'); equal(dp.o.orientation.y, 'auto', '"foo left"'); dp._process_options({orientation: 'top bar'}); equal(dp.o.orientation.x, 'auto', '"top bar"'); equal(dp.o.orientation.y, 'top', '"top bar"'); }); test('startDate', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', startDate: new Date(2012, 9, 26) }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-days tbody td:nth(25)'); ok(target.hasClass('disabled'), 'Previous day is disabled'); target = picker.find('.datepicker-days tbody td:nth(26)'); ok(!target.hasClass('disabled'), 'Specified date is enabled'); target = picker.find('.datepicker-days tbody td:nth(27)'); ok(!target.hasClass('disabled'), 'Next day is enabled'); }); test('endDate', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', endDate: new Date(2012, 9, 26) }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); target = picker.find('.datepicker-days tbody td:nth(25)'); ok(!target.hasClass('disabled'), 'Previous day is enabled'); target = picker.find('.datepicker-days tbody td:nth(26)'); ok(!target.hasClass('disabled'), 'Specified date is enabled'); target = picker.find('.datepicker-days tbody td:nth(27)'); ok(target.hasClass('disabled'), 'Next day is disabled'); }); test('Multidate', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', multidate: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); // Initial value is selected ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 (initial date) in dates'); // Select first target = picker.find('.datepicker-days tbody td:nth(7)'); equal(target.text(), '4'); // Mar 4 target.click(); datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 4), '2012-03-04 in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); equal(input.val(), '2012-03-05,2012-03-04'); // Select second target = picker.find('.datepicker-days tbody td:nth(15)'); equal(target.text(), '12'); // Mar 12 target.click(); datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 12), '2012-03-12 in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 12)); equal(input.val(), '2012-03-05,2012-03-04,2012-03-12'); // Deselect first target = picker.find('.datepicker-days tbody td:nth(7)'); equal(target.text(), '4'); // Mar 4 target.click(); ok(dp.dates.contains(UTCDate(2012, 2, 4)) === -1, '2012-03-04 no longer in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); equal(input.val(), '2012-03-05,2012-03-12'); }); test('Multidate with limit', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', multidate: 2 }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); // Initial value is selected ok(dp.dates.contains(UTCDate(2012, 2, 5)) !== -1, '2012-03-05 (initial date) in dates'); // Select first target = picker.find('.datepicker-days tbody td:nth(7)'); equal(target.text(), '4'); // Mar 4 target.click(); datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 4), '2012-03-04 in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 4)); equal(input.val(), '2012-03-05,2012-03-04'); // Select second target = picker.find('.datepicker-days tbody td:nth(15)'); equal(target.text(), '12'); // Mar 12 target.click(); datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 12), '2012-03-12 in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 12)); equal(input.val(), '2012-03-04,2012-03-12'); // Select third target = picker.find('.datepicker-days tbody td:nth(20)'); equal(target.text(), '17'); // Mar 17 target.click(); datesEqual(dp.dates.get(-1), UTCDate(2012, 2, 17), '2012-03-17 in dates'); ok(dp.dates.contains(UTCDate(2012, 2, 4)) === -1, '2012-03-04 no longer in dates'); datesEqual(dp.viewDate, UTCDate(2012, 2, 17)); equal(input.val(), '2012-03-12,2012-03-17'); }); test('Multidate Separator', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2012-03-05') .datepicker({ format: 'yyyy-mm-dd', multidate: true, multidateSeparator: ' ' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); // Select first target = picker.find('.datepicker-days tbody td:nth(7)'); equal(target.text(), '4'); // Mar 4 target.click(); equal(input.val(), '2012-03-05 2012-03-04'); // Select second target = picker.find('.datepicker-days tbody td:nth(15)'); equal(target.text(), '12'); // Mar 12 target.click(); equal(input.val(), '2012-03-05 2012-03-04 2012-03-12'); }); test("Picker is shown on input focus when showOnFocus is not defined", function () { var input = $('') .appendTo('#qunit-fixture') .val('2014-01-01') .datepicker({ }), dp = input.data('datepicker'), picker = dp.picker; input.focus(); ok(picker.is(":visible"), "Datepicker is visible"); }); test("Picker is shown on input focus when showOnFocus is true", function () { var input = $('') .appendTo('#qunit-fixture') .val('2014-01-01') .datepicker({ showOnFocus: true }), dp = input.data('datepicker'), picker = dp.picker; input.focus(); ok(picker.is(":visible"), "Datepicker is visible"); }); test("Picker is hidden on input focus when showOnFocus is false", function () { var input = $('') .appendTo('#qunit-fixture') .val('2014-01-01') .datepicker({ showOnFocus: false }), dp = input.data('datepicker'), picker = dp.picker; input.focus(); ok(picker.is(":hidden"), "Datepicker is hidden"); }); test('Container', function(){ var testContainer = $('
') .appendTo('#qunit-fixture'), input = $('') .appendTo('#qunit-fixture') .val('2012-10-26') .datepicker({ format: 'yyyy-mm-dd', container: '.date-picker-container', startDate: new Date(2012, 9, 26) }), dp = input.data('datepicker'), target = dp.picker; input.focus(); equal(target.parent()[0], testContainer[0], 'Container is not the testContainer that was specificed'); }); test('Default View Date (Object)', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ format: 'yyyy-mm-dd', defaultViewDate: { year: 1977, month: 04, day: 25 } }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'May 1977'); }); test('Default View Date (Date)', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ format: 'yyyy-mm-dd', defaultViewDate: new Date(1977, 4, 25) }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'May 1977'); }); test('Default View Date (String)', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ format: 'yyyy-mm-dd', defaultViewDate: "1977-05-24" }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'May 1977'); }); test('Immediate Updates', function(){ var input = $('') .appendTo('#qunit-fixture') .val('2014-01-01') .datepicker({ format: 'yyyy-mm-dd', immediateUpdates: true }), dp = input.data('datepicker'), picker = dp.picker; // Change month input.focus(); picker.find('.datepicker-days .next').click(); equal(input.val(), '2014-02-01'); // Change year picker.find('.datepicker-days .datepicker-switch').click(); picker.find('.datepicker-months .next').click(); equal(input.val(), '2015-02-01'); // Change decade set (doesn't update input) picker.find('.datepicker-months .datepicker-switch').click(); picker.find('.datepicker-years .next').click(); equal(input.val(), '2015-02-01'); // Change century set (doesn't update input) picker.find('.datepicker-years .datepicker-switch').click(); picker.find('.datepicker-decades .next').click(); equal(input.val(), '2015-02-01'); // Change millennium set (doesn't update input) picker.find('.datepicker-decades .datepicker-switch').click(); picker.find('.datepicker-centuries .next').click(); equal(input.val(), '2015-02-01'); }); test('forceParse: false on enter on invalid date', function () { var input = $('') .appendTo('#qunit-fixture') .val('123456789') .datepicker({forceParse: false}) .focus(); input.trigger({ type: 'keydown', keyCode: 13, shiftKey: false }); equal(input.val(), '123456789', 'date not parsed'); }); test('forceParse: false on mousedown on invalid date', function () { var input = $('') .appendTo('#qunit-fixture') .val('123456789') .datepicker({forceParse: false}) .focus(); $(document).trigger({ type: 'mousedown' }); equal(input.val(), '123456789', 'date not parsed'); }); //datepicker-dropdown test('Enable on readonly options (default)', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({format: "dd-mm-yyyy"}), dp = input.data('datepicker'), picker = dp.picker; ok(!picker.is(':visible')); input.focus(); ok(picker.is(':visible')); }); test('Enable on readonly options (false)', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ format: "dd-mm-yyyy", enableOnReadonly: false }), dp = input.data('datepicker'), picker = dp.picker; ok(!picker.is(':visible')); input.focus(); ok(!picker.is(':visible')); }); test('Startview: year view visible after date pick', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ startView: 2, minViewMode: 1, autoclose: true }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); target = picker.find('.datepicker-years tbody td:nth(7)'); target.click(); target = picker.find('.datepicker-years tbody td:nth(4)'); target.click(); target = picker.find('.datepicker-years tbody td:nth(20)'); target.click(); input.focus(); ok(picker.find('.datepicker-days').is(':not(:visible)'), 'Days view hidden'); ok(picker.find('.datepicker-months').is(':not(:visible)'), 'Months view hidden'); ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible'); }); test('Title: none', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ format: 'yyyy-mm-dd' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.is(':visible'), 'Picker is visible'); target = picker.find('.datepicker-days thead .datepicker-title'); ok(target.is(':not(:visible)'), 'Title is hidden'); }); test('Title: with value', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ format: 'yyyy-mm-dd', title: 'Some Title' }), dp = input.data('datepicker'), picker = dp.picker, target; input.focus(); ok(picker.is(':visible'), 'Picker is visible'); target = picker.find('.datepicker-days thead .datepicker-title'); ok(target.is(':visible'), 'Title is visible'); equal(target.text(), 'Some Title'); }); test('i18n: Leverage i18n titleFormat when available.', patch_date(function(Date){ var input = $('') .appendTo('#qunit-fixture') .val('2015年04月21日') .datepicker({ language: 'zh-CN' }), dp = input.data('datepicker'), picker = dp.picker; input.focus(); equal(picker.find('.datepicker-days thead .datepicker-switch').text(), '2015年04月', 'Title is in Chinese: 2015年04月'); })); test('i18n: Leverage English (default) i18n titleFormat when translation key for specified language is not available.', patch_date(function(Date){ var input = $('') .appendTo('#qunit-fixture') .val('04/21/2015') .datepicker({ language: 'aa-BB' }), dp = input.data('datepicker'), picker = dp.picker; input.focus(); equal(picker.find('.datepicker-days thead .datepicker-switch').text(), 'April 2015', 'Title is in default format: April 2015'); })); test('Z-index Offset: none', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker(), dp = input.data('datepicker'), picker = dp.picker; input.parent().css('z-index', 234); input.focus(); equal(dp.o.zIndexOffset, 10, 'Z-index offset option defaults to 10.'); equal(picker.css('z-index'), 244, 'Picker Z-index offset is respected.'); }); test('Z-index Offset: with value', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ zIndexOffset: 1000 }), dp = input.data('datepicker'), picker = dp.picker; input.parent().css('z-index', 234); input.focus(); equal(dp.o.zIndexOffset, 1000, 'Z-index offset option is accepted.'); equal(picker.css('z-index'), 1234, 'Picker Z-index offset is respected.'); }); test('templates', function(){ var input = $('') .appendTo('#qunit-fixture') .datepicker({ templates: { leftArrow: '', rightArrow: '' } }), dp = input.data('datepicker'), picker = dp.picker; input.focus(); equal(picker.find('.datepicker-days .prev').prop('innerHTML'), ''); equal(picker.find('.datepicker-days .next').prop('innerHTML'), $('