From 827511b6f98171f372791ef2ca60703974a8076c Mon Sep 17 00:00:00 2001 From: Keith Wood Date: Sat, 27 Mar 2010 18:17:33 +1000 Subject: [PATCH 1/2] Refactor of Datepicker to use Widget framework Added templating for layout --- demos/datepicker/alignment.html | 61 + demos/datepicker/alt-field.html | 10 +- demos/datepicker/animation.html | 18 +- demos/datepicker/buttonbar.html | 9 +- demos/datepicker/change-content.html | 45 + demos/datepicker/change-select.html | 40 + demos/datepicker/change-style.html | 43 + demos/datepicker/date-formats.html | 23 +- demos/datepicker/day-hover.html | 42 + demos/datepicker/default-date.html | 53 + demos/datepicker/default.html | 16 +- demos/datepicker/dropdown-month-year.html | 22 +- demos/datepicker/event-search.html | 11 +- demos/datepicker/events.html | 39 + demos/datepicker/first-day.html | 39 + demos/datepicker/icon-trigger.html | 32 +- demos/datepicker/index.html | 17 +- demos/datepicker/inline.html | 18 +- demos/datepicker/localization.html | 15 +- demos/datepicker/min-max.html | 35 +- demos/datepicker/multiple-calendars.html | 21 +- demos/datepicker/other-months.html | 15 +- demos/datepicker/show-status.html | 39 + demos/datepicker/show-week.html | 10 +- tests/unit/datepicker/datepicker.html | 6 +- tests/unit/datepicker/datepicker_core.js | 399 ++- tests/unit/datepicker/datepicker_events.js | 173 +- tests/unit/datepicker/datepicker_methods.js | 152 +- tests/unit/datepicker/datepicker_options.js | 896 +++--- tests/unit/datepicker/datepicker_tickets.js | 26 +- tests/visual/datepicker/datepicker.html | 94 +- themes/base/jquery.ui.datepicker.css | 64 +- ui/i18n/jquery.ui.datepicker-af.js | 33 +- ui/i18n/jquery.ui.datepicker-ar.js | 33 +- ui/i18n/jquery.ui.datepicker-az.js | 33 +- ui/i18n/jquery.ui.datepicker-bg.js | 34 +- ui/i18n/jquery.ui.datepicker-bs.js | 33 +- ui/i18n/jquery.ui.datepicker-ca.js | 33 +- ui/i18n/jquery.ui.datepicker-cs.js | 33 +- ui/i18n/jquery.ui.datepicker-da.js | 33 +- ui/i18n/jquery.ui.datepicker-de.js | 33 +- ui/i18n/jquery.ui.datepicker-el.js | 33 +- ui/i18n/jquery.ui.datepicker-en-GB.js | 33 +- ui/i18n/jquery.ui.datepicker-eo.js | 33 +- ui/i18n/jquery.ui.datepicker-es.js | 33 +- ui/i18n/jquery.ui.datepicker-et.js | 33 +- ui/i18n/jquery.ui.datepicker-eu.js | 33 +- ui/i18n/jquery.ui.datepicker-fa.js | 33 +- ui/i18n/jquery.ui.datepicker-fi.js | 33 +- ui/i18n/jquery.ui.datepicker-fo.js | 33 +- ui/i18n/jquery.ui.datepicker-fr-CH.js | 43 +- ui/i18n/jquery.ui.datepicker-fr.js | 35 +- ui/i18n/jquery.ui.datepicker-he.js | 35 +- ui/i18n/jquery.ui.datepicker-hr.js | 33 +- ui/i18n/jquery.ui.datepicker-hu.js | 33 +- ui/i18n/jquery.ui.datepicker-hy.js | 33 +- ui/i18n/jquery.ui.datepicker-id.js | 35 +- ui/i18n/jquery.ui.datepicker-is.js | 35 +- ui/i18n/jquery.ui.datepicker-it.js | 35 +- ui/i18n/jquery.ui.datepicker-ja.js | 35 +- ui/i18n/jquery.ui.datepicker-ko.js | 35 +- ui/i18n/jquery.ui.datepicker-lt.js | 33 +- ui/i18n/jquery.ui.datepicker-lv.js | 33 +- ui/i18n/jquery.ui.datepicker-ms.js | 33 +- ui/i18n/jquery.ui.datepicker-nl.js | 33 +- ui/i18n/jquery.ui.datepicker-no.js | 33 +- ui/i18n/jquery.ui.datepicker-pl.js | 33 +- ui/i18n/jquery.ui.datepicker-pt-BR.js | 33 +- ui/i18n/jquery.ui.datepicker-ro.js | 40 +- ui/i18n/jquery.ui.datepicker-ru.js | 33 +- ui/i18n/jquery.ui.datepicker-sk.js | 33 +- ui/i18n/jquery.ui.datepicker-sl.js | 35 +- ui/i18n/jquery.ui.datepicker-sq.js | 33 +- ui/i18n/jquery.ui.datepicker-sr-SR.js | 33 +- ui/i18n/jquery.ui.datepicker-sr.js | 33 +- ui/i18n/jquery.ui.datepicker-sv.js | 35 +- ui/i18n/jquery.ui.datepicker-ta.js | 33 +- ui/i18n/jquery.ui.datepicker-th.js | 33 +- ui/i18n/jquery.ui.datepicker-tr.js | 33 +- ui/i18n/jquery.ui.datepicker-uk.js | 33 +- ui/i18n/jquery.ui.datepicker-vi.js | 33 +- ui/i18n/jquery.ui.datepicker-zh-CN.js | 35 +- ui/i18n/jquery.ui.datepicker-zh-HK.js | 24 +- ui/i18n/jquery.ui.datepicker-zh-TW.js | 35 +- ui/jquery.ui.datepicker.ext.js | 109 + ui/jquery.ui.datepicker.js | 2929 +++++++++---------- 86 files changed, 4182 insertions(+), 3086 deletions(-) create mode 100644 demos/datepicker/alignment.html create mode 100644 demos/datepicker/change-content.html create mode 100644 demos/datepicker/change-select.html create mode 100644 demos/datepicker/change-style.html create mode 100644 demos/datepicker/day-hover.html create mode 100644 demos/datepicker/default-date.html create mode 100644 demos/datepicker/events.html create mode 100644 demos/datepicker/first-day.html create mode 100644 demos/datepicker/show-status.html create mode 100644 ui/jquery.ui.datepicker.ext.js diff --git a/demos/datepicker/alignment.html b/demos/datepicker/alignment.html new file mode 100644 index 00000000000..239fdf6e1bb --- /dev/null +++ b/demos/datepicker/alignment.html @@ -0,0 +1,61 @@ + + + + + jQuery UI Datepicker - Popup Alignment + + + + + + + + + + + + +
+ +

My position:

+

At position:

+

Date:

+ +
+ +
+ +

Control the positioning of a popup datepicker via the myPosition and + atPosition options, which tie into the Position plugin. + The default is "left top" to "left bottom" (or both right if a right-to-left language).

+ +
+ + + diff --git a/demos/datepicker/alt-field.html b/demos/datepicker/alt-field.html index d51bf06346c..05203db8404 100644 --- a/demos/datepicker/alt-field.html +++ b/demos/datepicker/alt-field.html @@ -11,7 +11,10 @@ @@ -25,7 +28,10 @@
-

Populate an alternate field with its own date format whenever a date is selected using the altField and altFormat options. This feature could be used to present a human-friendly date for user selection, while passing a more computer-friendly date through for further processing.

+

Populate an alternate field with its own date format whenever a date is selected using the + altField and altFormat options. This feature could be used to + present a human-friendly date for user selection, while passing a more computer-friendly + date through for further processing.

diff --git a/demos/datepicker/animation.html b/demos/datepicker/animation.html index 27f20ffb8b5..06b60cdf3cf 100644 --- a/demos/datepicker/animation.html +++ b/demos/datepicker/animation.html @@ -7,13 +7,13 @@ - - - - - - - + + + + + + + + @@ -27,7 +28,9 @@
-

Display a button for selecting Today's date and a Done button for closing the calendar with the boolean showButtonPanel option. Each button is enabled by default when the bar is displayed, but can be turned off with additional options. Button text is customizable.

+

Display a button for selecting Today's date and a Close button for closing the calendar + by changing the renderer option to the buttonsRenderer. + Button text is customizable.

diff --git a/demos/datepicker/change-content.html b/demos/datepicker/change-content.html new file mode 100644 index 00000000000..774eded411a --- /dev/null +++ b/demos/datepicker/change-content.html @@ -0,0 +1,45 @@ + + + + + jQuery UI Datepicker - Change Day Content + + + + + + + + + + + +
+ +

Date:

+ +
+ +
+ +

Change the content of an individual date via the onDate callback. + Return an object for each date with content set. + In this case it includes the day of the year.

+ +
+ + + diff --git a/demos/datepicker/change-select.html b/demos/datepicker/change-select.html new file mode 100644 index 00000000000..ad45169e300 --- /dev/null +++ b/demos/datepicker/change-select.html @@ -0,0 +1,40 @@ + + + + + jQuery UI Datepicker - Change Day Selectability + + + + + + + + + + + +
+ +

Date:

+ +
+ +
+ +

Change the selectability of an individual date via the onDate callback. + Return an object for each date with selectable set appropriately. + Here the built-in noWeekends function is used to prevent selection + of days on weekends - available in the + jquery.ui.datepicker.ext.js module.

+ +
+ + + diff --git a/demos/datepicker/change-style.html b/demos/datepicker/change-style.html new file mode 100644 index 00000000000..841d973c1f4 --- /dev/null +++ b/demos/datepicker/change-style.html @@ -0,0 +1,43 @@ + + + + + jQuery UI Datepicker - Change Day Style + + + + + + + + + + + +
+ +

Date:

+ +
+ +
+ +

Change the style of an individual date via the onDate callback. + Return an object for each date with dateClass set and apply the corresponding CSS styling.

+ +
+ + + diff --git a/demos/datepicker/date-formats.html b/demos/datepicker/date-formats.html index 435ef7096bb..47c62693583 100644 --- a/demos/datepicker/date-formats.html +++ b/demos/datepicker/date-formats.html @@ -12,7 +12,9 @@ @@ -20,24 +22,25 @@
-

Date:

-

Format options:

+

Date:

+
-

Display date feedback in a variety of ways. Choose a date format from the dropdown, then click on the input and select a date to see it in that format.

+

Display date feedback in a variety of ways. Choose a date format from the dropdown, + then click on the input and select a date to see it in that format.

diff --git a/demos/datepicker/day-hover.html b/demos/datepicker/day-hover.html new file mode 100644 index 00000000000..3b96dde200f --- /dev/null +++ b/demos/datepicker/day-hover.html @@ -0,0 +1,42 @@ + + + + + jQuery UI Datepicker - Hover Over Day + + + + + + + + + + + +
+ +

Date: + You're looking at nothing.

+ +
+ +
+ +

Extend the datepicker to send callbacks when hovering over a date by wrapping your function + in the built-in hoverCallback and assigning it to the onShow option - + available in the jquery.ui.datepicker.ext.js module.

+ +
+ + + diff --git a/demos/datepicker/default-date.html b/demos/datepicker/default-date.html new file mode 100644 index 00000000000..fe0794455f6 --- /dev/null +++ b/demos/datepicker/default-date.html @@ -0,0 +1,53 @@ + + + + + jQuery UI Datepicker - Default Date + + + + + + + + + + + +
+ +

Default date:

+ +

Date:

+ +
+ +
+ +

Set an initial date to display when no other date has been selected with the + defaultDate option. Set this as an actual date (new Date(2010, 1 - 1, 1)), + as a numeric offset from today (-20), or as a string of periods and units ('+1M +10D') + offset from today. For the last, use 'D' for days, 'W' for weeks, 'M' for months, + or 'Y' for years. The default is to display today.

+ +
+ + + diff --git a/demos/datepicker/default.html b/demos/datepicker/default.html index 4ab50e1746e..2801363c898 100644 --- a/demos/datepicker/default.html +++ b/demos/datepicker/default.html @@ -12,6 +12,14 @@ @@ -19,13 +27,17 @@
-

Date:

+

Date: +

-

The datepicker is tied to a standard form input field. Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay. Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input's value.

+

The datepicker is tied to a standard form input field. Focus on the input + (click, or use the tab key) to open an interactive calendar in a small overlay. + Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. + If a date is chosen, feedback is shown as the input's value.

diff --git a/demos/datepicker/dropdown-month-year.html b/demos/datepicker/dropdown-month-year.html index c31d8ba8524..65ed44a7dd9 100644 --- a/demos/datepicker/dropdown-month-year.html +++ b/demos/datepicker/dropdown-month-year.html @@ -11,9 +11,11 @@ @@ -22,13 +24,25 @@
+

Year range:

+

Date:

-

Show month and year dropdowns in place of the static month/year header to facilitate navigation through large timeframes. Add the boolean changeMonth and changeYear options.

+

Show month and year dropdowns in place of the static month/year header to facilitate + navigation through large timeframes by adding the boolean changeMonth option. + Control which years are shown in the year drop-down via the yearRange option. + Note that this option only restricts what appears within the drop-down. You must use + the minDate and maxDate options to impose limits on the + actual dates that may be selected.

diff --git a/demos/datepicker/event-search.html b/demos/datepicker/event-search.html index c87ae17a469..53290e1ec7c 100644 --- a/demos/datepicker/event-search.html +++ b/demos/datepicker/event-search.html @@ -11,14 +11,12 @@ + + + + + + + + +
+ +

Date:

+ +
+ +
+ +

React to events within the datepicker such as when a new month is shown (changeMonthYear), + when a date is selected (select), or when the popup is closed (close). + Alternately, you can bind to these events by prefixing their name with 'datepicker'.

+ +
+ + + diff --git a/demos/datepicker/first-day.html b/demos/datepicker/first-day.html new file mode 100644 index 00000000000..1ecb3a403e5 --- /dev/null +++ b/demos/datepicker/first-day.html @@ -0,0 +1,39 @@ + + + + + jQuery UI Datepicker - Change First Week Day + + + + + + + + + + + +
+ +

Date:

+ +
+ +
+ +

Alter the datepicker before it shows with the onShow callback. + Here the built-in changeFirstDay function allows changing the first day + of the week by clicking on the column header - available in the + jquery.ui.datepicker.ext.js module.

+ +
+ + + diff --git a/demos/datepicker/icon-trigger.html b/demos/datepicker/icon-trigger.html index 6da3a7792d5..2642a889624 100644 --- a/demos/datepicker/icon-trigger.html +++ b/demos/datepicker/icon-trigger.html @@ -10,12 +10,27 @@ @@ -23,13 +38,20 @@
-

Date:

+

Trigger: +

+ +

Date: +

-

Click the icon next to the input field to show the datepicker. Set the datepicker to open on focus (default behavior), on icon click, or both.

+

Click the trigger next to the input field to show the datepicker. Set the datepicker to + open on focus (default behavior, showOnFocus option), + and/or provide a trigger element (showTrigger).

diff --git a/demos/datepicker/index.html b/demos/datepicker/index.html index 5749ae757b6..c06a6fa725d 100644 --- a/demos/datepicker/index.html +++ b/demos/datepicker/index.html @@ -12,18 +12,27 @@

Examples

diff --git a/demos/datepicker/inline.html b/demos/datepicker/inline.html index bf21fc92784..0fbe3132df2 100644 --- a/demos/datepicker/inline.html +++ b/demos/datepicker/inline.html @@ -9,9 +9,21 @@ + @@ -19,13 +31,15 @@
-Date:
+

Date: +

-

Display the datepicker embedded in the page instead of in an overlay. Simply call .datepicker() on a div instead of an input.

+

Display the datepicker embedded in the page instead of in an overlay. + Simply call .datepicker() on a div or a span instead of an input.

diff --git a/demos/datepicker/localization.html b/demos/datepicker/localization.html index 079ae05378f..f1a6b2ec58e 100644 --- a/demos/datepicker/localization.html +++ b/demos/datepicker/localization.html @@ -63,10 +63,10 @@ @@ -75,8 +75,7 @@
-

Date:   - @@ -131,11 +130,15 @@

+

Date:

+
-

Localize the datepicker calendar language and format (English / Western formatting is the default). The datepicker includes built-in support for languages that read right-to-left, such as Arabic and Hebrew.

+

Localize the datepicker calendar language and format (English / Western formatting + is the default). The datepicker includes built-in support for languages that read + right-to-left, such as Arabic and Hebrew.

diff --git a/demos/datepicker/min-max.html b/demos/datepicker/min-max.html index 7573e6926ee..80d9535738d 100644 --- a/demos/datepicker/min-max.html +++ b/demos/datepicker/min-max.html @@ -10,8 +10,19 @@ @@ -19,13 +30,33 @@
+

Minimum date:

+ +

Maximum date:

+

Date:

-

Restrict the range of selectable dates with the minDate and maxDate options. Set the beginning and end dates as actual dates (new Date(2009, 1 - 1, 26)), as a numeric offset from today (-20), or as a string of periods and units ('+1M +10D'). For the last, use 'D' for days, 'W' for weeks, 'M' for months, or 'Y' for years.

+

Restrict the range of selectable dates with the minDate and maxDate + options. Set the beginning and end dates as actual dates (new Date(2009, 1 - 1, 26)), + as a numeric offset from today (-20), or as a string of periods and units ('+1M +10D') + offset from today. For the last, use 'D' for days, 'W' for weeks, 'M' for months, + or 'Y' for years.

diff --git a/demos/datepicker/multiple-calendars.html b/demos/datepicker/multiple-calendars.html index 8051ca524a1..1d611771acf 100644 --- a/demos/datepicker/multiple-calendars.html +++ b/demos/datepicker/multiple-calendars.html @@ -10,10 +10,14 @@ @@ -22,13 +26,22 @@
+

Months:

+

Date:

-

Set the numberOfMonths option to an integer of 2 or more to show multiple months in a single datepicker.

+

Set the monthsToShow option to an integer of 2 or more to show multiple + months in a single datepicker. Alternately, provide an array containing the number + of rows and columns.

diff --git a/demos/datepicker/other-months.html b/demos/datepicker/other-months.html index 1c0b65559cd..8ed0ba36d1d 100644 --- a/demos/datepicker/other-months.html +++ b/demos/datepicker/other-months.html @@ -11,7 +11,15 @@ @@ -19,6 +27,8 @@
+

+

Date:

@@ -26,7 +36,8 @@

The datepicker can show dates that come from other than the main month - being displayed. These other dates can also be made selectable.

+ being displayed (showOtherMonths). These other dates can + also be made selectable (selectOtherMonths).

diff --git a/demos/datepicker/show-status.html b/demos/datepicker/show-status.html new file mode 100644 index 00000000000..70faa7c3f73 --- /dev/null +++ b/demos/datepicker/show-status.html @@ -0,0 +1,39 @@ + + + + + jQuery UI Datepicker - Show Status + + + + + + + + + + + +
+ +

Date:

+ +
+ +
+ +

Instead of displaying popup tooltips within the datepicker, add a status bar at the bottom + and show the tips there. Add this functionality by setting the onShow callback + to the built-in showStatus function - available in the + jquery.ui.datepicker.ext.js module.

+ +
+ + + diff --git a/demos/datepicker/show-week.html b/demos/datepicker/show-week.html index f6015a2af37..678f2a40104 100644 --- a/demos/datepicker/show-week.html +++ b/demos/datepicker/show-week.html @@ -8,10 +8,14 @@ + @@ -28,7 +32,9 @@

The datepicker can show the week of the year. The default calculation follows the ISO 8601 definition: the week starts on Monday, the first week of the year contains the first Thursday of the year. This means that some days from one - year may be placed into weeks 'belonging' to another year.

+ year may be placed into weeks 'belonging' to another year. + You need to use the weekOfYearRenderer - available in the + jquery.ui.datepicker.ext.js module.

diff --git a/tests/unit/datepicker/datepicker.html b/tests/unit/datepicker/datepicker.html index e64bc74c0b0..b5459ce07d1 100644 --- a/tests/unit/datepicker/datepicker.html +++ b/tests/unit/datepicker/datepicker.html @@ -10,6 +10,7 @@ + @@ -17,7 +18,7 @@ - + @@ -34,7 +35,8 @@

-

+

+
diff --git a/tests/unit/datepicker/datepicker_core.js b/tests/unit/datepicker/datepicker_core.js index 9867022f710..41f629b737c 100644 --- a/tests/unit/datepicker/datepicker_core.js +++ b/tests/unit/datepicker/datepicker_core.js @@ -2,17 +2,17 @@ * datepicker_core.js */ -function equalsDate(d1, d2, message) { +function equalDate(d1, d2, message) { if (!d1 || !d2) { ok(false, message + ' - missing date'); return; } d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()); d2 = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate()); - equals(d1.toString(), d2.toString(), message); + equal(d1.toString(), d2.toString(), message); } -function equalsDateArray(a1, a2, message) { +function equalDateArray(a1, a2, message) { if (!a1 || !a2) { ok(false, message + ' - missing dates'); return; @@ -24,6 +24,14 @@ function equalsDateArray(a1, a2, message) { same(a1, a2, message); } +function normaliseDate(date) { + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + return date; +} + function addMonths(date, offset) { var maxDay = 32 - new Date(date.getFullYear(), date.getMonth() + offset, 32).getDate(); date.setDate(Math.min(date.getDate(), maxDay)); @@ -32,8 +40,8 @@ function addMonths(date, offset) { } function init(id, options) { - $.datepicker.setDefaults($.datepicker.regional['']); - return $(id).datepicker($.extend({showAnim: ''}, options || {})); + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['']); + return $(id).datepicker('destroy').datepicker($.extend({showAnim: ''}, options || {})); } var PROP_NAME = 'datepicker'; @@ -47,94 +55,100 @@ module("datepicker: core", { } }); -test("widget method", function() { - var actual = $("#inp").datepicker().datepicker("widget")[0]; - same($("body > #ui-datepicker-div:last-child")[0], actual); +test('destroy', function() { + expect(6); + var inp = init('#inp'); + inp.focus(); + var dp = $('#ui-datepicker-div'); + ok(dp.length > 0, 'Create - popup exists'); + ok(inp.hasClass('ui-datepicker'), 'Create - has marker'); + ok($.data(inp[0], 'datepicker') != null, 'Create - has data'); + inp.datepicker('destroy'); + dp = $('#ui-datepicker-div'); + ok(dp.length == 0, 'Destroy - popup gone'); + ok(!inp.hasClass('ui-datepicker'), 'Destroy - has no marker'); + ok($.data(inp[0], 'datepicker') == null, 'Destroy - has no data'); }); -test('baseStructure', function() { +test('base structure', function() { + expect(57); + var iframe = ($.browser.msie && parseInt($.browser.version) < 7); var inp = init('#inp'); inp.focus(); var dp = $('#ui-datepicker-div'); - var iframe = ($.browser.msie && parseInt($.browser.version) < 7); ok(dp.is(':visible'), 'Structure - datepicker visible'); ok(!dp.is('.ui-datepicker-rtl'), 'Structure - not right-to-left'); ok(!dp.is('.ui-datepicker-multi'), 'Structure - not multi-month'); - equals(dp.children().length, 2 + (iframe ? 1 : 0), 'Structure - child count'); + equal(dp.children().length, 4 + (iframe ? 1 : 0), 'Structure - child count'); - var header = dp.children(':first'); + var cmd = dp.children(':first'); + ok(cmd.is('a.ui-datepicker-cmd-prev'), 'Structure - prev link'); + cmd = cmd.next(); + ok(cmd.is('a.ui-datepicker-cmd-next'), 'Structure - next link'); + + var row = cmd.next(); + ok(row.is('div.ui-datepicker-row-break'), 'Structure - row division'); + equal(row.children().length, 1, 'Structure - row child count'); + var group = row.children(':first'); + ok(group.is('div.ui-datepicker-group'), 'Structure - group division'); + equal(group.children().length, 2, 'Structure - group child count'); + var header = group.children(':first'); ok(header.is('div.ui-datepicker-header'), 'Structure - header division'); - equals(header.children().length, 3, 'Structure - header child count'); - ok(header.children(':first').is('a.ui-datepicker-prev') && header.children(':first').html() != '', 'Structure - prev link'); - ok(header.children(':eq(1)').is('a.ui-datepicker-next') && header.children(':eq(1)').html() != '', 'Structure - next link'); + equal(header.children().length, 0, 'Structure - header child count'); - var title = header.children(':last'); - ok(title.is('div.ui-datepicker-title') && title.html() != '','Structure - title division'); - equals(title.children().length, 2, 'Structure - title child count'); - ok(title.children(':first').is('span.ui-datepicker-month') && title.children(':first').text() != '', 'Structure - month text') - ok(title.children(':last').is('span.ui-datepicker-year') && title.children(':last').text() != '', 'Structure - year text') - - var table = dp.children(':eq(1)'); + var table = group.children(':last'); ok(table.is('table.ui-datepicker-calendar'), 'Structure - month table'); ok(table.children(':first').is('thead'), 'Structure - month table thead'); var thead = table.children(':first').children(':first'); ok(thead.is('tr'), 'Structure - month table title row'); - equals(thead.find('th').length, 7, 'Structure - month table title cells'); + equal(thead.find('th').length, 7, 'Structure - month table title cells'); ok(table.children(':eq(1)').is('tbody'), 'Structure - month table body'); ok(table.children(':eq(1)').children('tr').length >= 4, 'Structure - month table week count'); var week = table.children(':eq(1)').children(':first'); ok(week.is('tr'), 'Structure - month table week row'); - equals(week.children().length, 7, 'Structure - week child count'); - ok(week.children(':first').is('td.ui-datepicker-week-end'), 'Structure - month table first day cell'); - ok(week.children(':last').is('td.ui-datepicker-week-end'), 'Structure - month table second day cell'); + equal(week.children().length, 7, 'Structure - week child count'); + ok(week.children(':first').children(':first').is('span.ui-datepicker-week-end'), + 'Structure - month table first day cell'); + ok(week.children(':last').children(':first').is('a.ui-datepicker-week-end'), + 'Structure - month table last day cell'); ok(dp.children('iframe').length == (iframe ? 1 : 0), 'Structure - iframe'); inp.datepicker('hide').datepicker('destroy'); - // Editable month/year and button panel - inp = init('#inp', {changeMonth: true, changeYear: true, showButtonPanel: true}); - inp.focus(); - - var title = dp.find('div.ui-datepicker-title'); - ok(title.children(':first').is('select.ui-datepicker-month'), 'Structure - month selector'); - ok(title.children(':last').is('select.ui-datepicker-year'), 'Structure - year selector'); - - var panel = dp.children(':last'); - ok(panel.is('div.ui-datepicker-buttonpane'), 'Structure - button panel division'); - equals(panel.children().length, 2, 'Structure - button panel child count'); - ok(panel.children(':first').is('button.ui-datepicker-current'), 'Structure - today button'); - ok(panel.children(':last').is('button.ui-datepicker-close'), 'Structure - close button'); - inp.datepicker('hide').datepicker('destroy'); - // Multi-month 2 - inp = init('#inp', {numberOfMonths: 2}); + inp = init('#inp', {monthsToShow: 2}); inp.focus(); + dp = $('#ui-datepicker-div'); ok(dp.is('.ui-datepicker-multi'), 'Structure multi [2] - multi-month'); - equals(dp.children().length, 3 + (iframe ? 1 : 0), 'Structure multi [2] - child count'); - var child = dp.children(':first'); - ok(child.is('div.ui-datepicker-group') && child.is('div.ui-datepicker-group-first'), 'Structure multi [2] - first month division'); - child = dp.children(':eq(1)'); - ok(child.is('div.ui-datepicker-group') && child.is('div.ui-datepicker-group-last'), 'Structure multi [2] - second month division'); - child = dp.children(':eq(2)'); - ok(child.is('div.ui-datepicker-row-break'), 'Structure multi [2] - row break'); + equal(dp.children().length, 4 + (iframe ? 1 : 0), 'Structure multi [2] - child count'); + row = dp.children(':eq(2)'); + ok(row.is('div.ui-datepicker-row-break'), 'Structure multi [2] - row division'); + equal(row.children().length, 2, 'Structure multi [2] - row child count'); + var group = row.children(':first'); + ok(group.is('div.ui-datepicker-group'), 'Structure multi [2] - first month division'); + group = group.next(); + ok(group.is('div.ui-datepicker-group'), 'Structure multi [2] - second month division'); inp.datepicker('hide').datepicker('destroy'); // Multi-month [2, 2] - inp = init('#inp', {numberOfMonths: [2, 2]}); + inp = init('#inp', {monthsToShow: [2, 2]}); inp.focus(); - ok(dp.is('.ui-datepicker-multi'), 'Structure multi - multi-month'); - equals(dp.children().length, 6 + (iframe ? 1 : 0), 'Structure multi [2,2] - child count'); - child = dp.children(':first'); - ok(child.is('div.ui-datepicker-group') && child.is('div.ui-datepicker-group-first'), 'Structure multi [2,2] - first month division'); - child = dp.children(':eq(1)'); - ok(child.is('div.ui-datepicker-group') && child.is('div.ui-datepicker-group-last'), 'Structure multi [2,2] - second month division'); - child = dp.children(':eq(2)'); - ok(child.is('div.ui-datepicker-row-break'), 'Structure multi [2,2] - row break'); - child = dp.children(':eq(3)'); - ok(child.is('div.ui-datepicker-group') && child.is('div.ui-datepicker-group-first'), 'Structure multi [2,2] - third month division'); - child = dp.children(':eq(4)'); - ok(child.is('div.ui-datepicker-group') && child.is('div.ui-datepicker-group-last'), 'Structure multi [2,2] - fourth month division'); - child = dp.children(':eq(5)'); - ok(child.is('div.ui-datepicker-row-break'), 'Structure multi [2,2] - row break'); + dp = $('#ui-datepicker-div'); + ok(dp.is('.ui-datepicker-multi'), 'Structure multi [2,2] - multi-month'); + equal(dp.children().length, 5 + (iframe ? 1 : 0), 'Structure multi [2,2] - child count'); + row = dp.children(':eq(2)'); + ok(row.is('div.ui-datepicker-row-break'), 'Structure multi [2,2] - first row division'); + equal(row.children().length, 2, 'Structure multi [2,2] - row child count'); + group = row.children(':first'); + ok(group.is('div.ui-datepicker-group'), 'Structure multi [2,2] - first month division'); + group = group.next(); + ok(group.is('div.ui-datepicker-group'), 'Structure multi [2,2] - second month division'); + row = row.next(); + ok(row.is('div.ui-datepicker-row-break'), 'Structure multi [2,2] - second row division'); + equal(row.children().length, 2, 'Structure multi [2,2] - row child count'); + group = row.children(':first'); + ok(group.is('div.ui-datepicker-group'), 'Structure multi [2,2] - third month division'); + group = group.next(); + ok(group.is('div.ui-datepicker-group'), 'Structure multi [2,2] - fourth month division'); inp.datepicker('hide').datepicker('destroy'); // Inline @@ -143,100 +157,91 @@ test('baseStructure', function() { ok(dp.is('.ui-datepicker-inline'), 'Structure inline - main div'); ok(!dp.is('.ui-datepicker-rtl'), 'Structure inline - not right-to-left'); ok(!dp.is('.ui-datepicker-multi'), 'Structure inline - not multi-month'); - equals(dp.children().length, 2, 'Structure inline - child count'); - var header = dp.children(':first'); + equal(dp.children().length, 4, 'Structure inline - child count'); + cmd = dp.children(':first'); + ok(cmd.is('a.ui-datepicker-cmd-prev'), 'Structure inline - prev link'); + cmd = cmd.next(); + ok(cmd.is('a.ui-datepicker-cmd-next'), 'Structure inline - next link'); + row = cmd.next(); + ok(row.is('div.ui-datepicker-row-break'), 'Structure inline - row division'); + equal(row.children().length, 1, 'Structure inline - row child count'); + group = row.children(':first'); + ok(group.is('div.ui-datepicker-group'), 'Structure inline - group division'); + equal(group.children().length, 2, 'Structure inline - group child count'); + header = group.children(':first'); ok(header.is('div.ui-datepicker-header'), 'Structure inline - header division'); - equals(header.children().length, 3, 'Structure inline - header child count'); - var table = dp.children(':eq(1)'); + equal(header.children().length, 0, 'Structure inline - header child count'); + table = group.children(':last'); ok(table.is('table.ui-datepicker-calendar'), 'Structure inline - month table'); - ok(table.children(':first').is('thead'), 'Structure inline - month table thead'); - ok(table.children(':eq(1)').is('tbody'), 'Structure inline - month table body'); inl.datepicker('destroy'); // Inline multi-month - inl = init('#inl', {numberOfMonths: 2}); + inl = init('#inl', {monthsToShow: 2}); dp = inl.children(); ok(dp.is('.ui-datepicker-inline') && dp.is('.ui-datepicker-multi'), 'Structure inline multi - main div'); - equals(dp.children().length, 3 + (iframe ? 1 : 0), 'Structure inline multi - child count'); - child = dp.children(':first'); - ok(child.is('div.ui-datepicker-group') && child.is('div.ui-datepicker-group-first'), 'Structure inline multi - first month division'); - child = dp.children(':eq(1)'); - ok(child.is('div.ui-datepicker-group') && child.is('div.ui-datepicker-group-last'), 'Structure inline multi - second month division'); - child = dp.children(':eq(2)'); - ok(child.is('div.ui-datepicker-row-break'), 'Structure inline multi - row break'); + equal(dp.children().length, 4 + (iframe ? 1 : 0), 'Structure inline multi - child count'); + row = dp.children(':eq(2)'); + ok(row.is('div.ui-datepicker-row-break'), 'Structure inline multi - row division'); + var group = row.children(':first'); + ok(group.is('div.ui-datepicker-group'), 'Structure inline multi - first month division'); + group = group.next(); + ok(group.is('div.ui-datepicker-group'), 'Structure inline multi - second month division'); inl.datepicker('destroy'); }); -test('customStructure', function() { - var dp = $('#ui-datepicker-div'); +test('custom structure', function() { + expect(10); + var iframe = ($.browser.msie && parseInt($.browser.version) < 7); // Check right-to-left localisation - var inp = init('#inp', $.datepicker.regional['he']); - inp.data('showButtonPanel.datepicker',true); + var inp = init('#inp', $.ui.datepicker.regional['he']); inp.focus(); - var iframe = ($.browser.msie && parseInt($.browser.version) < 7); + var dp = $('#ui-datepicker-div'); ok(dp.is('.ui-datepicker-rtl'), 'Structure RTL - right-to-left'); - var header = dp.children(':first'); - ok(header.is('div.ui-datepicker-header'), 'Structure RTL - header division'); - equals(header.children().length, 3, 'Structure RTL - header child count'); - ok(header.children(':first').is('a.ui-datepicker-next'), 'Structure RTL - prev link'); - ok(header.children(':eq(1)').is('a.ui-datepicker-prev'), 'Structure RTL - next link'); - var panel = dp.children(':last'); - ok(panel.is('div.ui-datepicker-buttonpane'), 'Structure RTL - button division'); - equals(panel.children().length, 2, 'Structure RTL - button panel child count'); - ok(panel.children(':first').is('button.ui-datepicker-close'), 'Structure RTL - close button'); - ok(panel.children(':last').is('button.ui-datepicker-current'), 'Structure RTL - today button'); - inp.datepicker('hide').datepicker('destroy'); - - // Hide prev/next - inp = init('#inp', {hideIfNoPrevNext: true, minDate: new Date(2008, 2 - 1, 4), maxDate: new Date(2008, 2 - 1, 14)}); - inp.val('02/10/2008').focus(); - var header = dp.children(':first'); - ok(header.is('div.ui-datepicker-header'), 'Structure hide prev/next - header division'); - equals(header.children().length, 1, 'Structure hide prev/next - links child count'); - ok(header.children(':first').is('div.ui-datepicker-title'), 'Structure hide prev/next - title division'); + var cmd = dp.children(':first'); + ok(cmd.is('a.ui-datepicker-cmd-prev'), 'Structure RTL - prev link'); + cmd = cmd.next(); + ok(cmd.is('a.ui-datepicker-cmd-next'), 'Structure RTL - next link'); inp.datepicker('hide').datepicker('destroy'); - // Changeable Month with read-only year + // Selectable month/year inp = init('#inp', {changeMonth: true}); inp.focus(); - var title = dp.children(':first').children(':last'); - equals(title.children().length, 2, 'Structure changeable month - title child count'); - ok(title.children(':first').is('select.ui-datepicker-month'), 'Structure changeable month - month selector'); - ok(title.children(':last').is('span.ui-datepicker-year'), 'Structure changeable month - read-only year'); + dp = $('#ui-datepicker-div'); + var header = dp.find('div.ui-datepicker-header'); + equal(header.children().length, 2, 'Structure - header child count'); + ok(header.children(':first').is('select.ui-datepicker-month-year'), 'Structure - month selector'); + ok(header.children(':last').is('select.ui-datepicker-month-year'), 'Structure - year selector'); inp.datepicker('hide').datepicker('destroy'); - // Changeable year with read-only month - inp = init('#inp', {changeYear: true}); - inp.focus(); - var title = dp.children(':first').children(':last'); - equals(title.children().length, 2, 'Structure changeable year - title child count'); - ok(title.children(':first').is('span.ui-datepicker-month'), 'Structure changeable year - read-only month'); - ok(title.children(':last').is('select.ui-datepicker-year'), 'Structure changeable year - year selector'); - inp.datepicker('hide').datepicker('destroy'); - - // Read-only first day of week - inp = init('#inp', {changeFirstDay: false}); + // Editable year + inp = init('#inp', {changeMonth: true, yearRange: 'any'}); inp.focus(); - var thead = dp.find('.ui-datepicker-calendar thead tr'); - equals(thead.children().length, 7, 'Structure read-only first day - thead child count'); - equals(thead.find('a').length, 0, 'Structure read-only first day - thead links count'); + dp = $('#ui-datepicker-div'); + header = dp.find('div.ui-datepicker-header'); + equal(header.children().length, 3, 'Structure - header child count'); + ok(header.children(':first').is('select.ui-datepicker-month-year'), 'Structure - month selector'); + ok(header.children(':eq(1)').is('select.ui-datepicker-month-year.ui-datepicker-any-year'), 'Structure - year selector'); + ok(header.children(':last').is('input.ui-datepicker-month-year'), 'Structure - year entry'); inp.datepicker('hide').datepicker('destroy'); + + // Trigger!!! }); test('keystrokes', function() { + expect(25); var inp = init('#inp'); var date = new Date(); inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke enter'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke enter'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Keystroke enter - preset'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+home'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+home'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); ok(inp.datepicker('getDate') == null, 'Keystroke ctrl+end'); @@ -245,196 +250,180 @@ test('keystrokes', function() { ok(inp.datepicker('getDate') == null, 'Keystroke esc'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Keystroke esc - preset'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Keystroke esc - abandoned'); // Moving by day or week inp.val('').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_LEFT}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() - 1); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+left'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+left'); inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_LEFT}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 1); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke left'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke left'); inp.val('').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_RIGHT}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 1); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+right'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+right'); inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_RIGHT}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() - 1); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke right'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke right'); inp.val('').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_UP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() - 7); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+up'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+up'); inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_UP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 7); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke up'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke up'); inp.val('').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 7); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+down'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke ctrl+down'); inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() - 7); - equalsDate(inp.datepicker('getDate'), date, 'Keystroke down'); + equalDate(inp.datepicker('getDate'), date, 'Keystroke down'); // Moving by month or year inp.val('02/04/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 4), 'Keystroke pgup'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 4), 'Keystroke pgdn'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 4), 'Keystroke ctrl+pgup'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 4), 'Keystroke ctrl+pgdn'); // Check for moving to short months inp.val('03/31/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), 'Keystroke pgup - Feb'); inp.val('01/30/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 29), 'Keystroke pgdn - Feb'); inp.val('02/29/2008').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 28), + equalDate(inp.datepicker('getDate'), new Date(2007, 2 - 1, 28), 'Keystroke ctrl+pgup - Feb'); inp.val('02/29/2008').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 28), + equalDate(inp.datepicker('getDate'), new Date(2009, 2 - 1, 28), 'Keystroke ctrl+pgdn - Feb'); - // Goto current - inp.datepicker('option', {gotoCurrent: true}). - datepicker('hide').val('02/04/2008').datepicker('show'). - simulate('keydown', {keyCode: $.simulate.VK_PGDN}). - simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}). - simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), - 'Keystroke ctrl+home'); // Change steps - inp.datepicker('option', {stepMonths: 2, gotoCurrent: false}). + inp.datepicker('option', {monthsToStep: 2}). datepicker('hide').val('02/04/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2007, 12 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2007, 12 - 1, 4), 'Keystroke pgup step 2'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 4 - 1, 4), + equalDate(inp.datepicker('getDate'), new Date(2008, 4 - 1, 4), 'Keystroke pgdn step 2'); }); test('mouse', function() { - var inp = init('#inp'); - var dp = $('#ui-datepicker-div'); + expect(15); + var inp = init('#inp', {renderer: $.ui.datepicker.buttonsRenderer}); var date = new Date(); inp.val('').datepicker('show'); - $('.ui-datepicker-calendar tbody a:contains(10)', dp).simulate('click', {}); + $('#ui-datepicker-div .ui-datepicker-calendar tbody a:contains(10)').click(); date.setDate(10); - equalsDate(inp.datepicker('getDate'), date, 'Mouse click'); - inp.val('02/04/2008').datepicker('show'); - $('.ui-datepicker-calendar tbody a:contains(12)', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 12), - 'Mouse click - preset'); + equalDate(inp.datepicker('getDate'), date, 'Mouse click'); inp.val('02/04/2008').datepicker('show'); + $('#ui-datepicker-div .ui-datepicker-calendar tbody a:contains(12)').click(); + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 12), 'Mouse click - preset'); inp.val('').datepicker('show'); - $('button.ui-datepicker-close', dp).simulate('click', {}); + $('#ui-datepicker-div .ui-datepicker-cmd-close').click(); ok(inp.datepicker('getDate') == null, 'Mouse click - close'); inp.val('02/04/2008').datepicker('show'); - $('button.ui-datepicker-close', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), - 'Mouse click - close + preset'); + $('#ui-datepicker-div .ui-datepicker-cmd-close').click(); + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Mouse click - close + preset'); inp.val('02/04/2008').datepicker('show'); - $('a.ui-datepicker-prev', dp).simulate('click', {}); - $('button.ui-datepicker-close', dp).simulate('click', {}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), - 'Mouse click - abandoned'); + $('#ui-datepicker-div a.ui-datepicker-prev').click(); + $('#ui-datepicker-div .ui-datepicker-cmd-close').click(); + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 4), 'Mouse click - abandoned'); // Current/previous/next - inp.val('02/04/2008').datepicker('option', {showButtonPanel: true}).datepicker('show'); - $('.ui-datepicker-current', dp).simulate('click', {}); - $('.ui-datepicker-calendar tbody a:contains(14)', dp).simulate('click', {}); + inp.val('02/04/2008').datepicker('show'); + $('#ui-datepicker-div .ui-datepicker-cmd-today').click(); + $('#ui-datepicker-div .ui-datepicker-calendar tbody a:contains(14)').click(); date.setDate(14); - equalsDate(inp.datepicker('getDate'), date, 'Mouse click - current'); + equalDate(inp.datepicker('getDate'), date, 'Mouse click - today'); inp.val('02/04/2008').datepicker('show'); - $('.ui-datepicker-prev', dp).simulate('click'); - $('.ui-datepicker-calendar tbody a:contains(16)', dp).simulate('click'); - equalsDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 16), - 'Mouse click - previous'); + $('#ui-datepicker-div .ui-datepicker-cmd-prev').click(); + $('#ui-datepicker-div .ui-datepicker-calendar tbody a:contains(16)').click(); + equalDate(inp.datepicker('getDate'), new Date(2008, 1 - 1, 16), 'Mouse click - previous'); inp.val('02/04/2008').datepicker('show'); - $('.ui-datepicker-next', dp).simulate('click'); - $('.ui-datepicker-calendar tbody a:contains(18)', dp).simulate('click'); - equalsDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 18), - 'Mouse click - next'); + $('#ui-datepicker-div .ui-datepicker-cmd-next').click(); + $('#ui-datepicker-div .ui-datepicker-calendar tbody a:contains(18)').click(); + equalDate(inp.datepicker('getDate'), new Date(2008, 3 - 1, 18), 'Mouse click - next'); // Previous/next with minimum/maximum inp.datepicker('option', {minDate: new Date(2008, 2 - 1, 2), maxDate: new Date(2008, 2 - 1, 26)}).val('02/04/2008').datepicker('show'); - $('.ui-datepicker-prev', dp).simulate('click'); - $('.ui-datepicker-calendar tbody a:contains(16)', dp).simulate('click'); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 16), + $('#ui-datepicker-div .ui-datepicker-cmd-prev').click(); + $('#ui-datepicker-div .ui-datepicker-calendar tbody a:contains(16)').click(); + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 16), 'Mouse click - previous + min/max'); inp.val('02/04/2008').datepicker('show'); - $('.ui-datepicker-next', dp).simulate('click'); - $('.ui-datepicker-calendar tbody a:contains(18)', dp).simulate('click'); - equalsDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 18), + $('#ui-datepicker-div .ui-datepicker-cmd-next').click(); + $('#ui-datepicker-div .ui-datepicker-calendar tbody a:contains(18)').click(); + equalDate(inp.datepicker('getDate'), new Date(2008, 2 - 1, 18), 'Mouse click - next + min/max'); // Inline - var inl = init('#inl'); - var dp = $('.ui-datepicker-inline', inl); - var date = new Date(); + var inl = init('#inl', {renderer: $.ui.datepicker.buttonsRenderer}); + date = new Date(); inl.datepicker('setDate', date); - $('.ui-datepicker-calendar tbody a:contains(10)', dp).simulate('click', {}); + $('.ui-datepicker-inline .ui-datepicker-calendar tbody a:contains(10)').click(); date.setDate(10); - equalsDate(inl.datepicker('getDate'), date, 'Mouse click inline'); - inl.datepicker('option', {showButtonPanel: true}).datepicker('setDate', new Date(2008, 2 - 1, 4)); - $('.ui-datepicker-calendar tbody a:contains(12)', dp).simulate('click', {}); - equalsDate(inl.datepicker('getDate'), new Date(2008, 2 - 1, 12), 'Mouse click inline - preset'); - inl.datepicker('option', {showButtonPanel: true}); - $('.ui-datepicker-current', dp).simulate('click', {}); - $('.ui-datepicker-calendar tbody a:contains(14)', dp).simulate('click', {}); + equalDate(inl.datepicker('getDate'), date, 'Mouse click inline'); + inl.datepicker('setDate', new Date(2008, 2 - 1, 4)); + $('.ui-datepicker-inline .ui-datepicker-calendar tbody a:contains(12)').click(); + equalDate(inl.datepicker('getDate'), new Date(2008, 2 - 1, 12), 'Mouse click inline - preset'); + $('.ui-datepicker-inline .ui-datepicker-cmd-today').click(); + $('.ui-datepicker-inline .ui-datepicker-calendar tbody a:contains(14)').click(); date.setDate(14); - equalsDate(inl.datepicker('getDate'), date, 'Mouse click inline - current'); + equalDate(inl.datepicker('getDate'), date, 'Mouse click inline - today'); inl.datepicker('setDate', new Date(2008, 2 - 1, 4)); - $('.ui-datepicker-prev', dp).simulate('click'); - $('.ui-datepicker-calendar tbody a:contains(16)', dp).simulate('click'); - equalsDate(inl.datepicker('getDate'), new Date(2008, 1 - 1, 16), + $('.ui-datepicker-inline .ui-datepicker-cmd-prev').click(); + $('.ui-datepicker-inline .ui-datepicker-calendar tbody a:contains(16)').click(); + equalDate(inl.datepicker('getDate'), new Date(2008, 1 - 1, 16), 'Mouse click inline - previous'); inl.datepicker('setDate', new Date(2008, 2 - 1, 4)); - $('.ui-datepicker-next', dp).simulate('click'); - $('.ui-datepicker-calendar tbody a:contains(18)', dp).simulate('click'); - equalsDate(inl.datepicker('getDate'), new Date(2008, 3 - 1, 18), + $('.ui-datepicker-inline .ui-datepicker-cmd-next').click(); + $('.ui-datepicker-inline .ui-datepicker-calendar tbody a:contains(18)').click(); + equalDate(inl.datepicker('getDate'), new Date(2008, 3 - 1, 18), 'Mouse click inline - next'); }); diff --git a/tests/unit/datepicker/datepicker_events.js b/tests/unit/datepicker/datepicker_events.js index 0c207097ad2..9a63150f49b 100644 --- a/tests/unit/datepicker/datepicker_events.js +++ b/tests/unit/datepicker/datepicker_events.js @@ -12,111 +12,170 @@ module("datepicker: events", { var selectedThis = null; var selectedDate = null; -var selectedInst = null; -function callback(date, inst) { +function callback(event, date) { selectedThis = this; selectedDate = date; - selectedInst = inst; -} - -function callback2(year, month, inst) { - selectedThis = this; - selectedDate = year + '/' + month; - selectedInst = inst; } test('events', function() { - var inp = init('#inp', {onSelect: callback}); + expect(21); + var inp = init('#inp', {select: callback}); var date = new Date(); - // onSelect + // select inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equals(selectedThis, inp[0], 'Callback selected this'); - equals(selectedInst, $.data(inp[0], PROP_NAME), 'Callback selected inst'); - equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), - 'Callback selected date'); + equal(selectedThis, inp[0], 'Callback selected this'); + equalDate(selectedDate, date, 'Callback selected date'); inp.val('').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 7); - equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), - 'Callback selected date - ctrl+down'); + equalDate(selectedDate, date, 'Callback selected date - ctrl+down'); inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', date), - 'Callback selected date - esc'); - // onChangeMonthYear - inp.datepicker('option', {onChangeMonthYear: callback2, onSelect: null}). + equalDate(selectedDate, date, 'Callback selected date - esc'); + // changeMonthYear + selectedThis = selectedDate = null; + inp.datepicker('option', {changeMonthYear: callback, select: null}). val('').datepicker('show'); - var newMonthYear = function(date) { - return date.getFullYear() + '/' + (date.getMonth() + 1); - }; date = new Date(); date.setDate(1); inp.simulate('keydown', {keyCode: $.simulate.VK_PGUP}); date.setMonth(date.getMonth() - 1); - equals(selectedThis, inp[0], 'Callback change month/year this'); - equals(selectedInst, $.data(inp[0], PROP_NAME), 'Callback change month/year inst'); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year date - pgup'); + equal(selectedThis, inp[0], 'Callback change month/year this'); + equalDate(selectedDate, date, 'Callback change month/year date - pgup'); + inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); + date.setMonth(date.getMonth() + 1); + equalDate(selectedDate, date, 'Callback change month/year date - pgdn'); + inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}); + date.setFullYear(date.getFullYear() - 1); + equalDate(selectedDate, date, 'Callback change month/year date - ctrl+pgup'); + inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}); + date.setFullYear(date.getFullYear() + 1); + equalDate(selectedDate, date, 'Callback change month/year date - ctrl+home'); + inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}); + date.setFullYear(date.getFullYear() + 1); + equalDate(selectedDate, date, 'Callback change month/year date - ctrl+pgdn'); + inp.datepicker('setDate', new Date(2007, 1 - 1, 26)); + equalDate(selectedDate, new Date(2007, 1 - 1, 1), 'Callback change month/year date - setDate'); + selectedDate = null; + inp.datepicker('setDate', new Date(2007, 1 - 1, 12)); + equal(selectedDate, null, 'Callback change month/year date - setDate no change'); + // changeMonthYear step by 2 + selectedThis = selectedDate = null; + inp.datepicker('option', {monthsToStep: 2}). + datepicker('hide').val('').datepicker('show'). + simulate('keydown', {keyCode: $.simulate.VK_PGUP}); + date.setMonth(date.getMonth() - 14); + equalDate(selectedDate, date, 'Callback change month/year by 2 date - pgup'); + inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}); + date.setMonth(date.getMonth() - 12); + equalDate(selectedDate, date, 'Callback change month/year by 2 date - ctrl+pgup'); + inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); + date.setMonth(date.getMonth() + 2); + equalDate(selectedDate, date, 'Callback change month/year by 2 date - pgdn'); + inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}); + date.setMonth(date.getMonth() + 12); + equalDate(selectedDate, date, 'Callback change month/year by 2 date - ctrl+pgdn'); + // close + selectedThis = selectedDate = null; + inp.datepicker('option', {close: callback, changeMonthYear: null, monthsToStep: 1}). + val('').datepicker('show'). + simulate('keydown', {keyCode: $.simulate.VK_ESC}); + equal(selectedThis, inp[0], 'Callback close this'); + deepEqual(selectedDate, {}, 'Callback close date - esc'); + inp.val('').datepicker('show'). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}); + equalDate(selectedDate, new Date(), 'Callback close date - enter'); + inp.val('02/04/2008').datepicker('show'). + simulate('keydown', {keyCode: $.simulate.VK_ESC}); + equalDate(selectedDate, new Date(2008, 2 - 1, 4), 'Callback close date - preset'); + inp.val('02/04/2008').datepicker('show'). + simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); + deepEqual(selectedDate, {}, 'Callback close date - ctrl+end'); +}); + +test('bindings', function() { + expect(21); + var inp = init('#inp'); + inp.bind('datepickerselect', callback); + var date = new Date(); + // select + inp.val('').datepicker('show'). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}); + equal(selectedThis, inp[0], 'Callback selected this'); + equalDate(selectedDate, date, 'Callback selected date'); + inp.val('').datepicker('show'). + simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_DOWN}). + simulate('keydown', {keyCode: $.simulate.VK_ENTER}); + date.setDate(date.getDate() + 7); + equalDate(selectedDate, date, 'Callback selected date - ctrl+down'); + inp.val('').datepicker('show'). + simulate('keydown', {keyCode: $.simulate.VK_ESC}); + equalDate(selectedDate, date, 'Callback selected date - esc'); + // changeMonthYear + selectedThis = selectedDate = null; + inp.unbind('datepickerselect'); + inp.bind('datepickerchangemonthyear', callback); + inp.val('').datepicker('show'); + date = new Date(); + date.setDate(1); + inp.simulate('keydown', {keyCode: $.simulate.VK_PGUP}); + date.setMonth(date.getMonth() - 1); + equal(selectedThis, inp[0], 'Callback change month/year this'); + equalDate(selectedDate, date, 'Callback change month/year date - pgup'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); date.setMonth(date.getMonth() + 1); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year date - pgdn'); + equalDate(selectedDate, date, 'Callback change month/year date - pgdn'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}); date.setFullYear(date.getFullYear() - 1); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year date - ctrl+pgup'); + equalDate(selectedDate, date, 'Callback change month/year date - ctrl+pgup'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_HOME}); date.setFullYear(date.getFullYear() + 1); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year date - ctrl+home'); + equalDate(selectedDate, date, 'Callback change month/year date - ctrl+home'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}); date.setFullYear(date.getFullYear() + 1); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year date - ctrl+pgdn'); + equalDate(selectedDate, date, 'Callback change month/year date - ctrl+pgdn'); inp.datepicker('setDate', new Date(2007, 1 - 1, 26)); - equals(selectedDate, '2007/1', 'Callback change month/year date - setDate'); + equalDate(selectedDate, new Date(2007, 1 - 1, 1), 'Callback change month/year date - setDate'); selectedDate = null; inp.datepicker('setDate', new Date(2007, 1 - 1, 12)); - ok(selectedDate == null, 'Callback change month/year date - setDate no change'); - // onChangeMonthYear step by 2 - inp.datepicker('option', {stepMonths: 2}). + equal(selectedDate, null, 'Callback change month/year date - setDate no change'); + // changeMonthYear step by 2 + selectedThis = selectedDate = null; + inp.datepicker('option', {monthsToStep: 2}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_PGUP}); date.setMonth(date.getMonth() - 14); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year by 2 date - pgup'); + equalDate(selectedDate, date, 'Callback change month/year by 2 date - pgup'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}); date.setMonth(date.getMonth() - 12); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year by 2 date - ctrl+pgup'); + equalDate(selectedDate, date, 'Callback change month/year by 2 date - ctrl+pgup'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); date.setMonth(date.getMonth() + 2); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year by 2 date - pgdn'); + equalDate(selectedDate, date, 'Callback change month/year by 2 date - pgdn'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}); date.setMonth(date.getMonth() + 12); - equals(selectedDate, newMonthYear(date), - 'Callback change month/year by 2 date - ctrl+pgdn'); - // onClose - inp.datepicker('option', {onClose: callback, onChangeMonthYear: null, stepMonths: 1}). + equalDate(selectedDate, date, 'Callback change month/year by 2 date - ctrl+pgdn'); + // close + selectedThis = selectedDate = null; + inp.unbind('datepickerchangemonthyear'); + inp.bind('datepickerclose', callback); + inp.datepicker('option', {monthsToStep: 1}). val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equals(selectedThis, inp[0], 'Callback close this'); - equals(selectedInst, $.data(inp[0], PROP_NAME), 'Callback close inst'); - equals(selectedDate, '', 'Callback close date - esc'); + equal(selectedThis, inp[0], 'Callback close this'); + deepEqual(selectedDate, {}, 'Callback close date - esc'); inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equals(selectedDate, $.datepicker.formatDate('mm/dd/yy', new Date()), - 'Callback close date - enter'); + equalDate(selectedDate, new Date(), 'Callback close date - enter'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equals(selectedDate, '02/04/2008', 'Callback close date - preset'); + equalDate(selectedDate, new Date(2008, 2 - 1, 4), 'Callback close date - preset'); inp.val('02/04/2008').datepicker('show'). simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); - equals(selectedDate, '', 'Callback close date - ctrl+end'); + deepEqual(selectedDate, {}, 'Callback close date - ctrl+end'); }); })(jQuery); diff --git a/tests/unit/datepicker/datepicker_methods.js b/tests/unit/datepicker/datepicker_methods.js index c102f7ac30a..7ffd585e3d7 100644 --- a/tests/unit/datepicker/datepicker_methods.js +++ b/tests/unit/datepicker/datepicker_methods.js @@ -10,63 +10,123 @@ module("datepicker: methods", { } }); +test('date functions', function() { + expect(111); + // daysInMonth + var dim = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + for (var m = 1; m <= 12; m++) { + equal($.ui.datepicker.daysInMonth(2007, m), dim[m - 1], 'Days in month ' + m + '/2007'); + var date = $.ui.datepicker.newDate(2007, m, m + 10); + equal($.ui.datepicker.daysInMonth(date), dim[m - 1], 'Days in month ' + date); + } + dim[1] = 29; + for (var m = 1; m <= 12; m++) { + equal($.ui.datepicker.daysInMonth(2008, m), dim[m - 1], 'Days in month ' + m + '/2008'); + var date = $.ui.datepicker.newDate(2008, m, m + 10); + equal($.ui.datepicker.daysInMonth(date), dim[m - 1], 'Days in month ' + date); + } + // dayOfYear + var doy = [[$.ui.datepicker.newDate(2007, 1, 1), 1], [$.ui.datepicker.newDate(2007, 3, 1), 60], + [$.ui.datepicker.newDate(2007, 12, 31), 365], [$.ui.datepicker.newDate(2008, 1, 1), 1], + [$.ui.datepicker.newDate(2008, 3, 1), 61], [$.ui.datepicker.newDate(2008, 12, 31), 366]]; + for (var i = 0; i < doy.length; i++) { + var date = doy[i][0]; + equal($.ui.datepicker.dayOfYear(date), doy[i][1], 'Day of year ' + date); + equal($.ui.datepicker.dayOfYear(date.getFullYear(), date.getMonth() + 1, date.getDate()), doy[i][1], + 'Day of year ' + date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()); + } + // iso8601Week + var woy = [[$.ui.datepicker.newDate(2000, 12, 31), 52], [$.ui.datepicker.newDate(2001, 1, 1), 1], + [$.ui.datepicker.newDate(2001, 1, 7), 1], [$.ui.datepicker.newDate(2001, 1, 8), 2], + [$.ui.datepicker.newDate(2003, 12, 28), 52], [$.ui.datepicker.newDate(2003, 12, 29), 1], + [$.ui.datepicker.newDate(2004, 1, 4), 1], [$.ui.datepicker.newDate(2004, 1, 5), 2], + [$.ui.datepicker.newDate(2009, 12, 28), 53], [$.ui.datepicker.newDate(2010, 1, 3), 53], + [$.ui.datepicker.newDate(2010, 1, 4), 1], [$.ui.datepicker.newDate(2010, 1, 10), 1]]; + for (var i = 0; i < woy.length; i++) { + var date = woy[i][0]; + equal($.ui.datepicker.iso8601Week(date), woy[i][1], 'Week of year ' + date); + equal($.ui.datepicker.iso8601Week(date.getFullYear(), date.getMonth() + 1, date.getDate()), + woy[i][1], 'Week of year ' + date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()); + } + // today + var date = $.ui.datepicker.newDate(); + equalDate(date, normaliseDate(new Date()), 'Today'); + equal(date.getHours(), 0, 'Today - hours'); + equal(date.getMinutes(), 0, 'Today - minutes'); + equal(date.getSeconds(), 0, 'Today - seconds'); + equal(date.getMilliseconds(), 0, 'Today - milliseconds'); + // newDate + var date1 = new Date(2010, 1-1, 26, 12, 34, 56); + date = $.ui.datepicker.newDate(date1); + equalDate(date, normaliseDate(date1), 'New date 2010-01-26 12:34:56'); + equal(date.getHours(), 0, 'New date - hours'); + equal(date.getMinutes(), 0, 'New date - minutes'); + equal(date.getSeconds(), 0, 'New date - seconds'); + equal(date.getMilliseconds(), 0, 'New date - milliseconds'); + date1 = new Date(2010, 12-1, 1); + date = $.ui.datepicker.newDate(2010, 12, 1); + equalDate(date, date1, 'New date 2010-12-01'); + equal(date.getHours(), 0, 'New date - hours'); + equal(date.getMinutes(), 0, 'New date - minutes'); + equal(date.getSeconds(), 0, 'New date - seconds'); + equal(date.getMilliseconds(), 0, 'New date - milliseconds'); + // add + date = $.ui.datepicker.newDate(2009, 1, 2); + equalDate($.ui.datepicker.add(date, 1, 'y'), $.ui.datepicker.newDate(2010, 1, 2), 'Add 1 y'); + equalDate($.ui.datepicker.add(date, -2, 'y'), $.ui.datepicker.newDate(2008, 1, 2), 'Add -2 y'); + equalDate($.ui.datepicker.add(date, 1, 'm'), $.ui.datepicker.newDate(2008, 2, 2), 'Add 1 m'); + equalDate($.ui.datepicker.add(date, -2, 'm'), $.ui.datepicker.newDate(2007, 12, 2), 'Add -2 m'); + equalDate($.ui.datepicker.add(date, 1, 'w'), $.ui.datepicker.newDate(2007, 12, 9), 'Add 1 w'); + equalDate($.ui.datepicker.add(date, -2, 'w'), $.ui.datepicker.newDate(2007, 11, 25), 'Add -2 w'); + equalDate($.ui.datepicker.add(date, 1, 'd'), $.ui.datepicker.newDate(2007, 11, 26), 'Add 1 d'); + equalDate($.ui.datepicker.add(date, -2, 'd'), $.ui.datepicker.newDate(2007, 11, 24), 'Add -2 d'); + equalDate($.ui.datepicker.add($.ui.datepicker.add($.ui.datepicker.add($.ui.datepicker.add(date, 1, 'd'), 1, 'w'), 1, 'm'), 1, 'y'), + $.ui.datepicker.newDate(2009, 1, 2), 'Add 1 d, 1 w, 1 m, 1 y'); + equalDate($.ui.datepicker.add($.ui.datepicker.newDate(2008, 2, 20), 2, 'w'), + $.ui.datepicker.newDate(2008, 3, 5), 'Add 2 w over leap day'); + equalDate($.ui.datepicker.add($.ui.datepicker.newDate(2008, 1, 31), 1, 'm'), + $.ui.datepicker.newDate(2008, 2, 29), 'Add 1 m for leap day'); + equalDate($.ui.datepicker.add($.ui.datepicker.newDate(2008, 2, 29), 1, 'y'), + $.ui.datepicker.newDate(2009, 2, 28), 'Add 1 y to leap day'); +}); + test('destroy', function() { + expect(20); var inp = init('#inp'); - ok(inp.is('.hasDatepicker'), 'Default - marker class set'); + ok(inp.hasClass('ui-datepicker'), 'Default - marker class set'); ok($.data(inp[0], PROP_NAME), 'Default - instance present'); - ok(inp.next().is('#alt'), 'Default - button absent'); + ok(inp.next().is('#alt'), 'Default - trigger absent'); inp.datepicker('destroy'); inp = $('#inp'); - ok(!inp.is('.hasDatepicker'), 'Default - marker class cleared'); + ok(!inp.hasClass('ui-datepicker'), 'Default - marker class cleared'); ok(!$.data(inp[0], PROP_NAME), 'Default - instance absent'); - ok(inp.next().is('#alt'), 'Default - button absent'); - // With button - inp= init('#inp', {showOn: 'both'}); - ok(inp.is('.hasDatepicker'), 'Button - marker class set'); - ok($.data(inp[0], PROP_NAME), 'Button - instance present'); - ok(inp.next().text() == '...', 'Button - button added'); - inp.datepicker('destroy'); - inp = $('#inp'); - ok(!inp.is('.hasDatepicker'), 'Button - marker class cleared'); - ok(!$.data(inp[0], PROP_NAME), 'Button - instance absent'); - ok(inp.next().is('#alt'), 'Button - button removed'); - // With append text - inp = init('#inp', {appendText: 'Testing'}); - ok(inp.is('.hasDatepicker'), 'Append - marker class set'); - ok($.data(inp[0], PROP_NAME), 'Append - instance present'); - ok(inp.next().text() == 'Testing', 'Append - append text added'); - inp.datepicker('destroy'); - inp = $('#inp'); - ok(!inp.is('.hasDatepicker'), 'Append - marker class cleared'); - ok(!$.data(inp[0], PROP_NAME), 'Append - instance absent'); - ok(inp.next().is('#alt'), 'Append - append text removed'); - // With both - inp= init('#inp', {showOn: 'both', buttonImageOnly: true, - buttonImage: 'img/calendar.gif', appendText: 'Testing'}); - ok(inp.is('.hasDatepicker'), 'Both - marker class set'); - ok($.data(inp[0], PROP_NAME), 'Both - instance present'); - ok(inp.next()[0].nodeName.toLowerCase() == 'img', 'Both - button added'); - ok(inp.next().next().text() == 'Testing', 'Both - append text added'); + ok(inp.next().is('#alt'), 'Default - trigger absent'); + // With trigger + inp = init('#inp', {showTrigger: ''}); + ok(inp.hasClass('ui-datepicker'), 'Trigger - marker class set'); + ok($.data(inp[0], PROP_NAME), 'Trigger - instance present'); + ok(inp.next().is('img'), 'Trigger - trigger added'); inp.datepicker('destroy'); inp = $('#inp'); - ok(!inp.is('.hasDatepicker'), 'Both - marker class cleared'); - ok(!$.data(inp[0], PROP_NAME), 'Both - instance absent'); - ok(inp.next().is('#alt'), 'Both - button and append text absent'); + ok(!inp.hasClass('ui-datepicker'), 'Trigger - marker class cleared'); + ok(!$.data(inp[0], PROP_NAME), 'Trigger - instance absent'); + ok(inp.next().is('#alt'), 'Trigger - trigger removed'); // Inline var inl = init('#inl'); - ok(inl.is('.hasDatepicker'), 'Inline - marker class set'); + ok(inl.hasClass('ui-datepicker'), 'Inline - marker class set'); ok(inl.html() != '', 'Inline - datepicker present'); ok($.data(inl[0], PROP_NAME), 'Inline - instance present'); - ok(inl.next().length == 0 || inl.next().is('p'), 'Inline - button absent'); + ok(inl.next().length == 0 || inl.next().is('p'), 'Inline - trigger absent'); inl.datepicker('destroy'); inl = $('#inl'); - ok(!inl.is('.hasDatepicker'), 'Inline - marker class cleared'); + ok(!inl.hasClass('ui-datepicker'), 'Inline - marker class cleared'); ok(inl.html() == '', 'Inline - datepicker absent'); ok(!$.data(inl[0], PROP_NAME), 'Inline - instance absent'); - ok(inl.next().length == 0 || inl.next().is('p'), 'Inline - button absent'); + ok(inl.next().length == 0 || inl.next().is('p'), 'Inline - trigger absent'); }); test('enableDisable', function() { + expect(30); var inp = init('#inp'); ok(!inp.datepicker('isDisabled'), 'Enable/disable - initially marked as enabled'); ok(!inp[0].disabled, 'Enable/disable - field initially enabled'); @@ -77,8 +137,8 @@ test('enableDisable', function() { ok(!inp.datepicker('isDisabled'), 'Enable/disable - now marked as enabled'); ok(!inp[0].disabled, 'Enable/disable - field now enabled'); inp.datepicker('destroy'); - // With a button - inp = init('#inp', {showOn: 'button'}); + // With a button trigger + inp = init('#inp', {showTrigger: ''}); ok(!inp.datepicker('isDisabled'), 'Enable/disable button - initially marked as enabled'); ok(!inp[0].disabled, 'Enable/disable button - field initially enabled'); ok(!inp.next('button')[0].disabled, 'Enable/disable button - button initially enabled'); @@ -91,9 +151,8 @@ test('enableDisable', function() { ok(!inp[0].disabled, 'Enable/disable button - field now enabled'); ok(!inp.next('button')[0].disabled, 'Enable/disable button - button now enabled'); inp.datepicker('destroy'); - // With an image button - inp = init('#inp', {showOn: 'button', buttonImageOnly: true, - buttonImage: 'img/calendar.gif'}); + // With an image trigger + inp = init('#inp', {showTrigger: ''}); ok(!inp.datepicker('isDisabled'), 'Enable/disable image - initially marked as enabled'); ok(!inp[0].disabled, 'Enable/disable image - field initially enabled'); ok(inp.next('img').css('opacity') == 1, 'Enable/disable image - image initially enabled'); @@ -108,15 +167,14 @@ test('enableDisable', function() { inp.datepicker('destroy'); // Inline var inl = init('#inl'); - var dp = $('.ui-datepicker-inline', inl); ok(!inl.datepicker('isDisabled'), 'Enable/disable inline - initially marked as enabled'); - ok(!dp.children().is('.ui-state-disabled'), 'Enable/disable inline - not visually disabled initially'); + ok(!inl.children().hasClass('ui-datepicker-disabled'), 'Enable/disable inline - not visually disabled initially'); inl.datepicker('disable'); ok(inl.datepicker('isDisabled'), 'Enable/disable inline - now marked as disabled'); - ok(dp.children().is('.ui-state-disabled'), 'Enable/disable inline - visually disabled'); + ok(inl.children().hasClass('ui-datepicker-disabled'), 'Enable/disable inline - visually disabled'); inl.datepicker('enable'); ok(!inl.datepicker('isDisabled'), 'Enable/disable inline - now marked as enabled'); - ok(!dp.children().is('.ui-state-disabled'), 'Enable/disable inline - not visiually disabled'); + ok(!inl.children().hasClass('ui-datepicker-disabled'), 'Enable/disable inline - not visiually disabled'); inl.datepicker('destroy'); }); diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index 2769bc582c6..dda3357c726 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -1,4 +1,4 @@ -/* +/* * datepicker_options.js */ @@ -11,69 +11,45 @@ module("datepicker: options", { } }); -test('setDefaults', function() { +test('set defaults', function() { + expect(3); var inp = init('#inp'); - equals($.datepicker._defaults.showOn, 'focus', 'Initial showOn'); - $.datepicker.setDefaults({showOn: 'button'}); - equals($.datepicker._defaults.showOn, 'button', 'Change default showOn'); - $.datepicker.setDefaults({showOn: 'focus'}); - equals($.datepicker._defaults.showOn, 'focus', 'Restore showOn'); + equal($.ui.datepicker.defaults.showOnFocus, true, 'Initial showOnFocus'); + $.extend($.ui.datepicker.defaults, {showOnFocus: false}); + equal($.ui.datepicker.defaults.showOnFocus, false, 'Change default showOnFocus'); + $.extend($.ui.datepicker.defaults, {showOnFocus: true}); + equal($.ui.datepicker.defaults.showOnFocus, true, 'Restore showOnFocus'); }); test('option', function() { + expect(13); var inp = init('#inp'); var inst = $.data(inp[0], PROP_NAME); // Set option - equals(inst.settings.showOn, null, 'Initial setting showOn'); - equals($.datepicker._get(inst, 'showOn'), 'focus', 'Initial instance showOn'); - equals($.datepicker._defaults.showOn, 'focus', 'Initial default showOn'); - inp.datepicker('option', 'showOn', 'button'); - equals(inst.settings.showOn, 'button', 'Change setting showOn'); - equals($.datepicker._get(inst, 'showOn'), 'button', 'Change instance showOn'); - equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); - inp.datepicker('option', {showOn: 'both'}); - equals(inst.settings.showOn, 'both', 'Change setting showOn'); - equals($.datepicker._get(inst, 'showOn'), 'both', 'Change instance showOn'); - equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); - inp.datepicker('option', 'showOn', undefined); - equals(inst.settings.showOn, null, 'Clear setting showOn'); - equals($.datepicker._get(inst, 'showOn'), 'focus', 'Restore instance showOn'); - equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); + equal(inst.options.showSpeed, null, 'Initial setting showSpeed'); + equal($.ui.datepicker.defaults.showSpeed, 'normal', 'Initial default showSpeed'); + equal(inst._get('showSpeed'), 'normal', 'Initial instance showSpeed'); + inp.datepicker('option', 'showSpeed', 'fast'); + equal(inst.options.showSpeed, 'fast', 'Change setting showSpeed'); + equal($.ui.datepicker.defaults.showSpeed, 'normal', 'Retain default showSpeed'); + equal(inst._get('showSpeed'), 'fast', 'Change instance showSpeed'); + inp.datepicker('option', {showSpeed: null}); + equal(inst.options.showSpeed, null, 'Change setting showSpeed'); + equal($.ui.datepicker.defaults.showSpeed, 'normal', 'Retain default showSpeed'); + equal(inst._get('showSpeed'), 'normal', 'Change instance showSpeed'); + inp.datepicker('option', {showSpeed: 'slow'}); + equal(inst.options.showSpeed, 'slow', 'Change setting showSpeed'); + equal($.ui.datepicker.defaults.showSpeed, 'normal', 'Retain default showSpeed'); + equal(inst._get('showSpeed'), 'slow', 'Change instance showSpeed'); // Get option inp = init('#inp'); - equals(inp.datepicker('option', 'showOn'), 'focus', 'Initial setting showOn'); - inp.datepicker('option', 'showOn', 'button'); - equals(inp.datepicker('option', 'showOn'), 'button', 'Change instance showOn'); - inp.datepicker('option', 'showOn', undefined); - equals(inp.datepicker('option', 'showOn'), 'focus', 'Reset instance showOn'); - same(inp.datepicker('option', 'all'), {showAnim: ''}, 'Get instance settings'); - same(inp.datepicker('option', 'defaults'), $.datepicker._defaults, - 'Get default settings'); -}); - -test('change', function() { - var inp = init('#inp'); - var inst = $.data(inp[0], PROP_NAME); - equals(inst.settings.showOn, null, 'Initial setting showOn'); - equals($.datepicker._get(inst, 'showOn'), 'focus', 'Initial instance showOn'); - equals($.datepicker._defaults.showOn, 'focus', 'Initial default showOn'); - inp.datepicker('change', 'showOn', 'button'); - equals(inst.settings.showOn, 'button', 'Change setting showOn'); - equals($.datepicker._get(inst, 'showOn'), 'button', 'Change instance showOn'); - equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); - inp.datepicker('change', {showOn: 'both'}); - equals(inst.settings.showOn, 'both', 'Change setting showOn'); - equals($.datepicker._get(inst, 'showOn'), 'both', 'Change instance showOn'); - equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); - inp.datepicker('change', 'showOn', undefined); - equals(inst.settings.showOn, null, 'Clear setting showOn'); - equals($.datepicker._get(inst, 'showOn'), 'focus', 'Restore instance showOn'); - equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); + inp.datepicker('option', 'showSpeed', 'fast'); + equal(inp.datepicker('option', 'showSpeed'), 'fast', 'Get instance showSpeed'); }); test('invocation', function() { + expect(29); var inp = init('#inp'); - var dp = $('#ui-datepicker-div'); var body = $('body'); // On focus var button = inp.siblings('button'); @@ -81,49 +57,48 @@ test('invocation', function() { var image = inp.siblings('img'); ok(image.length == 0, 'Focus - image absent'); inp.focus(); - ok(dp.is(':visible'), 'Focus - rendered on focus'); + ok($('#ui-datepicker-div:visible').length > 0, 'Focus - rendered on focus'); inp.simulate('keydown', {keyCode: $.simulate.VK_ESC}); - ok(!dp.is(':visible'), 'Focus - hidden on exit'); + ok($('#ui-datepicker-div:visible').length == 0, 'Focus - hidden on exit'); inp.focus(); - ok(dp.is(':visible'), 'Focus - rendered on focus'); - body.simulate('mousedown', {}); - ok(!dp.is(':visible'), 'Focus - hidden on external click'); + ok($('#ui-datepicker-div:visible').length > 0, 'Focus - rendered on focus'); + body.click(); + ok($('#ui-datepicker-div:visible').length == 0, 'Focus - hidden on external click'); inp.datepicker('hide').datepicker('destroy'); // On button - inp = init('#inp', {showOn: 'button', buttonText: 'Popup'}); - ok(!dp.is(':visible'), 'Button - initially hidden'); + inp = init('#inp', {showTrigger: '', showOnFocus: false}); + ok($('#ui-datepicker-div:visible').length == 0, 'Button - initially hidden'); button = inp.siblings('button'); image = inp.siblings('img'); ok(button.length == 1, 'Button - button present'); ok(image.length == 0, 'Button - image absent'); - equals(button.text(), 'Popup', 'Button - button text'); + equal(button.text(), 'Popup', 'Button - button text'); inp.focus(); - ok(!dp.is(':visible'), 'Button - not rendered on focus'); + ok($('#ui-datepicker-div:visible').length == 0, 'Button - not rendered on focus'); button.click(); - ok(dp.is(':visible'), 'Button - rendered on button click'); + ok($('#ui-datepicker-div:visible').length > 0, 'Button - rendered on button click'); button.click(); - ok(!dp.is(':visible'), 'Button - hidden on second button click'); + ok($('#ui-datepicker-div:visible').length == 0, 'Button - hidden on second button click'); inp.datepicker('hide').datepicker('destroy'); // On image button - inp = init('#inp', {showOn: 'button', buttonImageOnly: true, - buttonImage: 'img/calendar.gif', buttonText: 'Cal'}); - ok(!dp.is(':visible'), 'Image button - initially hidden'); + inp = init('#inp', {showTrigger: '', showOnFocus: false}); + ok($('#ui-datepicker-div:visible').length == 0, 'Image button - initially hidden'); button = inp.siblings('button'); ok(button.length == 0, 'Image button - button absent'); image = inp.siblings('img'); ok(image.length == 1, 'Image button - image present'); - equals(image.attr('src'), 'img/calendar.gif', 'Image button - image source'); - equals(image.attr('title'), 'Cal', 'Image button - image text'); + equal(image.attr('src'), 'img/calendar.gif', 'Image button - image source'); + equal(image.attr('title'), 'Cal', 'Image button - image text'); inp.focus(); - ok(!dp.is(':visible'), 'Image button - not rendered on focus'); + ok($('#ui-datepicker-div:visible').length == 0, 'Image button - not rendered on focus'); image.click(); - ok(dp.is(':visible'), 'Image button - rendered on image click'); + ok($('#ui-datepicker-div:visible').length > 0, 'Image button - rendered on image click'); image.click(); - ok(!dp.is(':visible'), 'Image button - hidden on second image click'); + ok($('#ui-datepicker-div:visible').length == 0, 'Image button - hidden on second image click'); inp.datepicker('hide').datepicker('destroy'); // On both - inp = init('#inp', {showOn: 'both', buttonImage: 'img/calendar.gif'}); - ok(!dp.is(':visible'), 'Both - initially hidden'); + inp = init('#inp', {showTrigger: ''}); + ok($('#ui-datepicker-div:visible').length == 0, 'Both - initially hidden'); button = inp.siblings('button'); ok(button.length == 1, 'Both - button present'); image = inp.siblings('img'); @@ -131,133 +106,138 @@ test('invocation', function() { image = button.children('img'); ok(image.length == 1, 'Both - button image present'); inp.focus(); - ok(dp.is(':visible'), 'Both - rendered on focus'); - body.simulate('mousedown', {}); - ok(!dp.is(':visible'), 'Both - hidden on external click'); + ok($('#ui-datepicker-div:visible').length > 0, 'Both - rendered on focus'); + body.click(); + ok($('#ui-datepicker-div:visible').length == 0, 'Both - hidden on external click'); button.click(); - ok(dp.is(':visible'), 'Both - rendered on button click'); + ok($('#ui-datepicker-div:visible').length > 0, 'Both - rendered on button click'); button.click(); - ok(!dp.is(':visible'), 'Both - hidden on second button click'); + ok($('#ui-datepicker-div:visible').length == 0, 'Both - hidden on second button click'); inp.datepicker('hide').datepicker('destroy'); }); test('otherMonths', function() { + expect(8); var inp = init('#inp'); - var pop = $('#ui-datepicker-div'); inp.val('06/01/2009').datepicker('show'); - equals(pop.find('tbody').text(), '\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0', + var pop = $('#ui-datepicker-div'); + equal(pop.find('tbody').text(), '\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0', 'Other months - none'); - ok(pop.find('td:last *').length == 0, 'Other months - no content'); + ok(pop.find('td:last span').length == 1 && $.trim(pop.find('td:last span').text()) == '', 'Other months - no content'); inp.datepicker('hide').datepicker('option', 'showOtherMonths', true).datepicker('show'); - equals(pop.find('tbody').text(), '311234567891011121314151617181920212223242526272829301234', + var pop = $('#ui-datepicker-div'); + equal(pop.find('tbody').text(), '311234567891011121314151617181920212223242526272829301234', 'Other months - show'); - ok(pop.find('td:last span').length == 1, 'Other months - span content'); + ok(pop.find('td:last span').length == 1 && $.trim(pop.find('td:last span').text()) != '', 'Other months - span content'); inp.datepicker('hide').datepicker('option', 'selectOtherMonths', true).datepicker('show'); - equals(pop.find('tbody').text(), '311234567891011121314151617181920212223242526272829301234', + var pop = $('#ui-datepicker-div'); + equal(pop.find('tbody').text(), '311234567891011121314151617181920212223242526272829301234', 'Other months - select'); - ok(pop.find('td:last a').length == 1, 'Other months - link content'); + ok(pop.find('td:last a').length == 1 && $.trim(pop.find('td:last a').text()) != '', 'Other months - link content'); inp.datepicker('hide').datepicker('option', 'showOtherMonths', false).datepicker('show'); - equals(pop.find('tbody').text(), '\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0', + var pop = $('#ui-datepicker-div'); + equal(pop.find('tbody').text(), '\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0', 'Other months - none'); - ok(pop.find('td:last *').length == 0, 'Other months - no content'); + ok(pop.find('td:last span').length == 1 && $.trim(pop.find('td:last span').text()) == '', 'Other months - no content'); }); test('defaultDate', function() { + expect(17); var inp = init('#inp'); var date = new Date(); inp.val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, 'Default date null'); + equalDate(inp.datepicker('getDate'), date, 'Default date null'); // Numeric values inp.datepicker('option', {defaultDate: -2}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() - 2); - equalsDate(inp.datepicker('getDate'), date, 'Default date -2'); + equalDate(inp.datepicker('getDate'), date, 'Default date -2'); inp.datepicker('option', {defaultDate: 3}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 5); - equalsDate(inp.datepicker('getDate'), date, 'Default date 3'); + equalDate(inp.datepicker('getDate'), date, 'Default date 3'); inp.datepicker('option', {defaultDate: 1 / 0}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() - 3); - equalsDate(inp.datepicker('getDate'), date, 'Default date Infinity'); + equalDate(inp.datepicker('getDate'), date, 'Default date Infinity'); inp.datepicker('option', {defaultDate: 1 / 'a'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, 'Default date NaN'); + equalDate(inp.datepicker('getDate'), date, 'Default date NaN'); // String offset values inp.datepicker('option', {defaultDate: '-1d'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() - 1); - equalsDate(inp.datepicker('getDate'), date, 'Default date -1d'); + equalDate(inp.datepicker('getDate'), date, 'Default date -1d'); inp.datepicker('option', {defaultDate: '+3D'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 4); - equalsDate(inp.datepicker('getDate'), date, 'Default date +3D'); + equalDate(inp.datepicker('getDate'), date, 'Default date +3D'); inp.datepicker('option', {defaultDate: ' -2 w '}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date = new Date(); date.setDate(date.getDate() - 14); - equalsDate(inp.datepicker('getDate'), date, 'Default date -2 w'); + equalDate(inp.datepicker('getDate'), date, 'Default date -2 w'); inp.datepicker('option', {defaultDate: '+1 W'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setDate(date.getDate() + 21); - equalsDate(inp.datepicker('getDate'), date, 'Default date +1 W'); + equalDate(inp.datepicker('getDate'), date, 'Default date +1 W'); inp.datepicker('option', {defaultDate: ' -1 m '}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date = addMonths(new Date(), -1); - equalsDate(inp.datepicker('getDate'), date, 'Default date -1 m'); + equalDate(inp.datepicker('getDate'), date, 'Default date -1 m'); inp.datepicker('option', {defaultDate: '+2M'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date = addMonths(new Date(), 2); - equalsDate(inp.datepicker('getDate'), date, 'Default date +2M'); + equalDate(inp.datepicker('getDate'), date, 'Default date +2M'); inp.datepicker('option', {defaultDate: '-2y'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date = new Date(); date.setFullYear(date.getFullYear() - 2); - equalsDate(inp.datepicker('getDate'), date, 'Default date -2y'); + equalDate(inp.datepicker('getDate'), date, 'Default date -2y'); inp.datepicker('option', {defaultDate: '+1 Y '}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date.setFullYear(date.getFullYear() + 3); - equalsDate(inp.datepicker('getDate'), date, 'Default date +1 Y'); + equalDate(inp.datepicker('getDate'), date, 'Default date +1 Y'); inp.datepicker('option', {defaultDate: '+1M +10d'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date = addMonths(new Date(), 1); date.setDate(date.getDate() + 10); - equalsDate(inp.datepicker('getDate'), date, 'Default date +1M +10d'); + equalDate(inp.datepicker('getDate'), date, 'Default date +1M +10d'); // String date values inp.datepicker('option', {defaultDate: '07/04/2007'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date = new Date(2007, 7 - 1, 4); - equalsDate(inp.datepicker('getDate'), date, 'Default date 07/04/2007'); + equalDate(inp.datepicker('getDate'), date, 'Default date 07/04/2007'); inp.datepicker('option', {dateFormat: 'yy-mm-dd', defaultDate: '2007-04-02'}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); date = new Date(2007, 4 - 1, 2); - equalsDate(inp.datepicker('getDate'), date, 'Default date 2007-04-02'); + equalDate(inp.datepicker('getDate'), date, 'Default date 2007-04-02'); // Date value date = new Date(2007, 1 - 1, 26); inp.datepicker('option', {dateFormat: 'mm/dd/yy', defaultDate: date}). datepicker('hide').val('').datepicker('show'). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, 'Default date 01/26/2007'); + equalDate(inp.datepicker('getDate'), date, 'Default date 01/26/2007'); }); test('miscellaneous', function() { - var dp = $('#ui-datepicker-div'); + expect(16); var inp = init('#inp'); // Year range var genRange = function(start, offset) { @@ -269,53 +249,56 @@ test('miscellaneous', function() { }; var curYear = new Date().getFullYear(); inp.val('02/04/2008').datepicker('show'); - equals(dp.find('.ui-datepicker-year').text(), '2008', 'Year range - read-only default'); - inp.datepicker('hide').datepicker('option', {changeYear: true}).datepicker('show'); - equals(dp.find('.ui-datepicker-year').text(), genRange(2008 - 10, 21), 'Year range - changeable default'); - inp.datepicker('hide').datepicker('option', {yearRange: 'c-6:c+2', changeYear: true}).datepicker('show'); - equals(dp.find('.ui-datepicker-year').text(), genRange(2008 - 6, 9), 'Year range - c-6:c+2'); - inp.datepicker('hide').datepicker('option', {yearRange: '2000:2010', changeYear: true}).datepicker('show'); - equals(dp.find('.ui-datepicker-year').text(), genRange(2000, 11), 'Year range - 2000:2010'); - inp.datepicker('hide').datepicker('option', {yearRange: '-5:+3', changeYear: true}).datepicker('show'); - equals(dp.find('.ui-datepicker-year').text(), genRange(curYear - 5, 9), 'Year range - -5:+3'); - inp.datepicker('hide').datepicker('option', {yearRange: '2000:-5', changeYear: true}).datepicker('show'); - equals(dp.find('.ui-datepicker-year').text(), genRange(2000, curYear - 2004), 'Year range - 2000:-5'); - inp.datepicker('hide').datepicker('option', {yearRange: '', changeYear: true}).datepicker('show'); - equals(dp.find('.ui-datepicker-year').text(), genRange(curYear, 1), 'Year range - -6:+2'); + ok($('#ui-datepicker-div .ui-datepicker-month-year:last').length == 0, + 'Year range - read-only default'); + inp.datepicker('hide').datepicker('option', {changeMonth: true}).datepicker('show'); + equal($('#ui-datepicker-div .ui-datepicker-month-year:last').text(), + genRange(2008 - 10, 21), 'Year range - changeable default'); + inp.datepicker('hide').datepicker('option', {yearRange: 'c-6:c+2', changeMonth: true}).datepicker('show'); + equal($('#ui-datepicker-div .ui-datepicker-month-year:last').text(), + genRange(2008 - 6, 9), 'Year range - c-6:c+2'); + inp.datepicker('hide').datepicker('option', {yearRange: '2000:2010', changeMonth: true}).datepicker('show'); + equal($('#ui-datepicker-div .ui-datepicker-month-year:last').text(), + genRange(2000, 11), 'Year range - 2000:2010'); + inp.datepicker('hide').datepicker('option', {yearRange: '-5:+3', changeMonth: true}).datepicker('show'); + equal($('#ui-datepicker-div .ui-datepicker-month-year:last').text(), + genRange(curYear - 5, 9), 'Year range - -5:+3'); + inp.datepicker('hide').datepicker('option', {yearRange: '2000:-5', changeMonth: true}).datepicker('show'); + equal($('#ui-datepicker-div .ui-datepicker-month-year:last').text(), + genRange(2000, curYear - 2004), 'Year range - 2000:-5'); + inp.datepicker('hide').datepicker('option', {yearRange: '', changeMonth: true}).datepicker('show'); + equal($('#ui-datepicker-div .ui-datepicker-month-year:last').text(), + genRange(curYear, 1), 'Year range - blank'); // Navigation as date format - inp.datepicker('option', {showButtonPanel: true}); - equals(dp.find('.ui-datepicker-prev').text(), 'Prev', 'Navigation prev - default'); - equals(dp.find('.ui-datepicker-current').text(), 'Today', 'Navigation current - default'); - equals(dp.find('.ui-datepicker-next').text(), 'Next', 'Navigation next - default'); - inp.datepicker('hide').datepicker('option', {navigationAsDateFormat: true, prevText: '< M', currentText: 'MM', nextText: 'M >'}). + inp = init('#inp', {renderer: $.ui.datepicker.buttonsRenderer}); + inp.focus(); + equal($('#ui-datepicker-div .ui-datepicker-cmd-prev').text(), '', 'Navigation next - default'); + inp.datepicker('hide').datepicker('option', {commandsAsDateFormat: true, + prevText: '< M', todayText: 'MM', nextText: 'M >'}). val('02/04/2008').datepicker('show'); - var longNames = $.datepicker.regional[''].monthNames; - var shortNames = $.datepicker.regional[''].monthNamesShort; + var longNames = $.ui.datepicker.regional[''].monthNames; + var shortNames = $.ui.datepicker.regional[''].monthNamesShort; var date = new Date(); - equals(dp.find('.ui-datepicker-prev').text(), '< ' + shortNames[0], 'Navigation prev - as date format'); - equals(dp.find('.ui-datepicker-current').text(), - longNames[date.getMonth()], 'Navigation current - as date format'); - equals(dp.find('.ui-datepicker-next').text(), + equal($('#ui-datepicker-div .ui-datepicker-cmd-prev').text(), '< ' + shortNames[0], + 'Navigation prev - as date format'); + equal($('#ui-datepicker-div .ui-datepicker-cmd-today').text(), + longNames[date.getMonth()], 'Navigation today - as date format'); + equal($('#ui-datepicker-div .ui-datepicker-cmd-next').text(), shortNames[2] + ' >', 'Navigation next - as date format'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}); - equals(dp.find('.ui-datepicker-prev').text(), + equal($('#ui-datepicker-div .ui-datepicker-cmd-prev').text(), '< ' + shortNames[1], 'Navigation prev - as date format + pgdn'); - equals(dp.find('.ui-datepicker-current').text(), - longNames[date.getMonth()], 'Navigation current - as date format + pgdn'); - equals(dp.find('.ui-datepicker-next').text(), + equal($('#ui-datepicker-div .ui-datepicker-cmd-today').text(), + longNames[date.getMonth()], 'Navigation today - as date format + pgdn'); + equal($('#ui-datepicker-div .ui-datepicker-cmd-next').text(), shortNames[3] + ' >', 'Navigation next - as date format + pgdn'); - inp.datepicker('hide').datepicker('option', {gotoCurrent: true}). - val('02/04/2008').datepicker('show'); - equals(dp.find('.ui-datepicker-prev').text(), - '< ' + shortNames[0], 'Navigation prev - as date format + goto current'); - equals(dp.find('.ui-datepicker-current').text(), - longNames[1], 'Navigation current - as date format + goto current'); - equals(dp.find('.ui-datepicker-next').text(), - shortNames[2] + ' >', 'Navigation next - as date format + goto current'); }); test('minMax', function() { + expect(17); var inp = init('#inp'); var lastYear = new Date(2007, 6 - 1, 4); var nextYear = new Date(2009, 6 - 1, 4); @@ -324,45 +307,45 @@ test('minMax', function() { inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), lastYear, + equalDate(inp.datepicker('getDate'), lastYear, 'Min/max - null, null - ctrl+pgup'); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), nextYear, + equalDate(inp.datepicker('getDate'), nextYear, 'Min/max - null, null - ctrl+pgdn'); inp.datepicker('option', {minDate: minDate}). datepicker('hide').val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), minDate, + equalDate(inp.datepicker('getDate'), minDate, 'Min/max - 02/29/2008, null - ctrl+pgup'); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), nextYear, + equalDate(inp.datepicker('getDate'), nextYear, 'Min/max - 02/29/2008, null - ctrl+pgdn'); inp.datepicker('option', {maxDate: maxDate}). datepicker('hide').val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), minDate, + equalDate(inp.datepicker('getDate'), minDate, 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgup'); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), maxDate, + equalDate(inp.datepicker('getDate'), maxDate, 'Min/max - 02/29/2008, 12/07/2008 - ctrl+pgdn'); inp.datepicker('option', {minDate: null}). datepicker('hide').val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), lastYear, + equalDate(inp.datepicker('getDate'), lastYear, 'Min/max - null, 12/07/2008 - ctrl+pgup'); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), maxDate, + equalDate(inp.datepicker('getDate'), maxDate, 'Min/max - null, 12/07/2008 - ctrl+pgdn'); // Relative dates var date = new Date(); @@ -371,543 +354,548 @@ test('minMax', function() { datepicker('hide').val('').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGUP}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, + equalDate(inp.datepicker('getDate'), date, 'Min/max - -1w, +1 M +10 D - ctrl+pgup'); date = addMonths(new Date(), 1); date.setDate(date.getDate() + 10); inp.val('').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equalsDate(inp.datepicker('getDate'), date, + equalDate(inp.datepicker('getDate'), date, 'Min/max - -1w, +1 M +10 D - ctrl+pgdn'); // With existing date inp = init('#inp'); inp.val('06/04/2008').datepicker('option', {minDate: minDate}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate > min'); + equalDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate > min'); inp.datepicker('option', {minDate: null}).val('01/04/2008').datepicker('option', {minDate: minDate}); - equalsDate(inp.datepicker('getDate'), minDate, 'Min/max - setDate < min'); + equalDate(inp.datepicker('getDate'), minDate, 'Min/max - setDate < min'); inp.datepicker('option', {minDate: null}).val('06/04/2008').datepicker('option', {maxDate: maxDate}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate < max'); + equalDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate < max'); inp.datepicker('option', {maxDate: null}).val('01/04/2009').datepicker('option', {maxDate: maxDate}); - equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max'); + equalDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max'); inp.datepicker('option', {maxDate: null}).val('01/04/2008').datepicker('option', {minDate: minDate, maxDate: maxDate}); - equalsDate(inp.datepicker('getDate'), minDate, 'Min/max - setDate < min'); + equalDate(inp.datepicker('getDate'), minDate, 'Min/max - setDate < min'); inp.datepicker('option', {maxDate: null}).val('06/04/2008').datepicker('option', {minDate: minDate, maxDate: maxDate}); - equalsDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate > min, < max'); + equalDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate > min, < max'); inp.datepicker('option', {maxDate: null}).val('01/04/2009').datepicker('option', {minDate: minDate, maxDate: maxDate}); - equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max'); + equalDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max'); }); test('setDate', function() { + expect(26); var inp = init('#inp'); var date1 = new Date(2008, 6 - 1, 4); var date2 = new Date(); - ok(inp.datepicker('getDate') == null, 'Set date - default'); + equal(inp.datepicker('getDate'), null, 'Set date - default'); inp.datepicker('setDate', date1); - equalsDate(inp.datepicker('getDate'), date1, 'Set date - 2008-06-04'); + equalDate(inp.datepicker('getDate'), date1, 'Set date - 2008-06-04'); date1 = new Date(); date1.setDate(date1.getDate() + 7); inp.datepicker('setDate', +7); - equalsDate(inp.datepicker('getDate'), date1, 'Set date - +7'); + equalDate(inp.datepicker('getDate'), date1, 'Set date - +7'); date2.setFullYear(date2.getFullYear() + 2); inp.datepicker('setDate', '+2y'); - equalsDate(inp.datepicker('getDate'), date2, 'Set date - +2y'); + equalDate(inp.datepicker('getDate'), date2, 'Set date - +2y'); inp.datepicker('setDate', date1, date2); - equalsDate(inp.datepicker('getDate'), date1, 'Set date - two dates'); + equalDate(inp.datepicker('getDate'), date1, 'Set date - two dates'); inp.datepicker('setDate'); ok(inp.datepicker('getDate') == null, 'Set date - null'); // Relative to current date date1 = new Date(); date1.setDate(date1.getDate() + 7); inp.datepicker('setDate', 'c +7'); - equalsDate(inp.datepicker('getDate'), date1, 'Set date - c +7'); + equalDate(inp.datepicker('getDate'), date1, 'Set date - c +7'); date1.setDate(date1.getDate() + 7); inp.datepicker('setDate', 'c+7'); - equalsDate(inp.datepicker('getDate'), date1, 'Set date - c+7'); + equalDate(inp.datepicker('getDate'), date1, 'Set date - c+7'); date1.setDate(date1.getDate() - 21); inp.datepicker('setDate', 'c -3 w'); - equalsDate(inp.datepicker('getDate'), date1, 'Set date - c -3 w'); + equalDate(inp.datepicker('getDate'), date1, 'Set date - c -3 w'); // Inline var inl = init('#inl'); date1 = new Date(2008, 6 - 1, 4); date2 = new Date(); - equalsDate(inl.datepicker('getDate'), date2, 'Set date inline - default'); + equal(inl.datepicker('getDate'), null, 'Set date inline - default'); inl.datepicker('setDate', date1); - equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - 2008-06-04'); + equalDate(inl.datepicker('getDate'), date1, 'Set date inline - 2008-06-04'); date1 = new Date(); date1.setDate(date1.getDate() + 7); inl.datepicker('setDate', +7); - equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - +7'); + equalDate(inl.datepicker('getDate'), date1, 'Set date inline - +7'); date2.setFullYear(date2.getFullYear() + 2); inl.datepicker('setDate', '+2y'); - equalsDate(inl.datepicker('getDate'), date2, 'Set date inline - +2y'); + equalDate(inl.datepicker('getDate'), date2, 'Set date inline - +2y'); inl.datepicker('setDate', date1, date2); - equalsDate(inl.datepicker('getDate'), date1, 'Set date inline - two dates'); + equalDate(inl.datepicker('getDate'), date1, 'Set date inline - two dates'); inl.datepicker('setDate'); ok(inl.datepicker('getDate') == null, 'Set date inline - null'); // Alternate field var alt = $('#alt'); - inp.datepicker('option', {altField: '#alt', altFormat: 'yy-mm-dd'}); + inp.datepicker('option', {altField: '#alt', altFormat: 'yyyy-mm-dd'}); date1 = new Date(2008, 6 - 1, 4); inp.datepicker('setDate', date1); - equals(inp.val(), '06/04/2008', 'Set date alternate - 06/04/2008'); - equals(alt.val(), '2008-06-04', 'Set date alternate - 2008-06-04'); + equal(inp.val(), '06/04/2008', 'Set date alternate - 06/04/2008'); + equal(alt.val(), '2008-06-04', 'Set date alternate - 2008-06-04'); // With minimum/maximum + var expectError = function(callback, message, error) { + try { + callback(); + ok(false, message); + } + catch (e) { + equal(e, error, message); + } + }; inp = init('#inp'); date1 = new Date(2008, 1 - 1, 4); - date2 = new Date(2008, 6 - 1, 4); + date2 = new Date(2008, 3 - 1, 4); + var date3 = new Date(2008, 6 - 1, 4); var minDate = new Date(2008, 2 - 1, 29); var maxDate = new Date(2008, 3 - 1, 28); - inp.val('').datepicker('option', {minDate: minDate}).datepicker('setDate', date2); - equalsDate(inp.datepicker('getDate'), date2, 'Set date min/max - setDate > min'); - inp.datepicker('setDate', date1); - equalsDate(inp.datepicker('getDate'), minDate, 'Set date min/max - setDate < min'); + inp.val('').datepicker('option', {minDate: minDate}); + expectError(function() { inp.val('').datepicker('setDate', date1); }, + 'Set date with min - setDate < min', 'Date is out of allowed range'); + inp.val('').datepicker('setDate', date2); + equalDate(inp.datepicker('getDate'), date2, 'Set date with min - setDate > min'); + inp.val('').datepicker('setDate', date3); + equalDate(inp.datepicker('getDate'), date3, 'Set date with min - setDate >> min'); inp.val('').datepicker('option', {maxDate: maxDate, minDate: null}).datepicker('setDate', date1); - equalsDate(inp.datepicker('getDate'), date1, 'Set date min/max - setDate < max'); - inp.datepicker('setDate', date2); - equalsDate(inp.datepicker('getDate'), maxDate, 'Set date min/max - setDate > max'); - inp.val('').datepicker('option', {minDate: minDate}).datepicker('setDate', date1); - equalsDate(inp.datepicker('getDate'), minDate, 'Set date min/max - setDate < min'); - inp.datepicker('setDate', date2); - equalsDate(inp.datepicker('getDate'), maxDate, 'Set date min/max - setDate > max'); + equalDate(inp.datepicker('getDate'), date1, 'Set date with max - setDate << max'); + inp.val('').datepicker('setDate', date2); + equalDate(inp.datepicker('getDate'), date2, 'Set date with max - setDate < max'); + expectError(function() { inp.val('').datepicker('setDate', date3); }, + 'Set date with max - setDate > max', 'Date is out of allowed range'); + inp.val('').datepicker('option', {minDate: minDate}); + expectError(function() { inp.val('').datepicker('setDate', date1); }, + 'Set date with min/max - setDate < min', 'Date is out of allowed range'); + inp.val('').datepicker('setDate', date2); + equalDate(inp.datepicker('getDate'), date2, 'Set date with min/max - min < setDate < max'); + expectError(function() { inp.val('').datepicker('setDate', date3); }, + 'Set date with min/max - setDate > max', 'Date is out of allowed range'); }); test('altField', function() { + expect(14); var inp = init('#inp'); var alt = $('#alt'); // No alternate field set alt.val(''); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equals(inp.val(), '06/04/2008', 'Alt field - dp - enter'); - equals(alt.val(), '', 'Alt field - alt not set'); + equal(inp.val(), '06/04/2008', 'Alt field - dp - enter'); + equal(alt.val(), '', 'Alt field - alt not set'); // Alternate field set alt.val(''); - inp.datepicker('option', {altField: '#alt', altFormat: 'yy-mm-dd'}). + inp.datepicker('option', {altField: '#alt', altFormat: 'yyyy-mm-dd'}). val('06/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equals(inp.val(), '06/04/2008', 'Alt field - dp - enter'); - equals(alt.val(), '2008-06-04', 'Alt field - alt - enter'); + equal(inp.val(), '06/04/2008', 'Alt field - dp - enter'); + equal(alt.val(), '2008-06-04', 'Alt field - alt - enter'); // Move from initial date alt.val(''); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ENTER}); - equals(inp.val(), '07/04/2008', 'Alt field - dp - pgdn'); - equals(alt.val(), '2008-07-04', 'Alt field - alt - pgdn'); + equal(inp.val(), '07/04/2008', 'Alt field - dp - pgdn'); + equal(alt.val(), '2008-07-04', 'Alt field - alt - pgdn'); // Alternate field set - closed alt.val(''); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {keyCode: $.simulate.VK_PGDN}). simulate('keydown', {keyCode: $.simulate.VK_ESC}); - equals(inp.val(), '06/04/2008', 'Alt field - dp - pgdn/esc'); - equals(alt.val(), '', 'Alt field - alt - pgdn/esc'); + equal(inp.val(), '06/04/2008', 'Alt field - dp - pgdn/esc'); + equal(alt.val(), '', 'Alt field - alt - pgdn/esc'); // Clear date and alternate alt.val(''); inp.val('06/04/2008').datepicker('show'); inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); - equals(inp.val(), '', 'Alt field - dp - ctrl+end'); - equals(alt.val(), '', 'Alt field - alt - ctrl+end'); + equal(inp.val(), '', 'Alt field - dp - ctrl+end'); + equal(alt.val(), '', 'Alt field - alt - ctrl+end'); // Verify alt field is updated on keyup alt.val(''); - inp.val('06/04/200').datepicker('show'); - inp.simulate('keydown', {charCode: '8'.charCodeAt(0)}); - inp.simulate('keypress', {charCode: '8'.charCodeAt(0)}); - inp.simulate('keyup', {charCode: '8'.charCodeAt(0)}); - equals(inp.val(), '06/04/2008', 'Alt field - dp - manual entry'); - equals(alt.val(), '2008-06-04', 'Alt field - manual entry'); + inp.val('06/04/2008').datepicker('show'); + inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). + simulate('keyup', {keyCode: $.simulate.VK_ENTER}); + equal(inp.val(), '06/04/2008', 'Alt field - dp - manual entry'); + equal(alt.val(), '2008-06-04', 'Alt field - manual entry'); // Verify alt field is not updated on keyup if date is invalid - inp.val('12/04'); - inp.simulate('keydown', {charCode: '/'.charCodeAt(0)}); - inp.simulate('keypress', {charCode: '/'.charCodeAt(0)}); - inp.simulate('keyup', {charCode: '/'.charCodeAt(0)}); - equals(inp.val(), '12/04/', 'Alt field - dp - manual entry incomplete'); - equals(alt.val(), '2008-06-04', 'Alt field - manual entry - not updated'); + inp.val('12/04/'); + inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}). + simulate('keyup', {keyCode: $.simulate.VK_ENTER}); + equal(inp.val(), '12/04/', 'Alt field - dp - manual entry incomplete'); + equal(alt.val(), '2008-06-04', 'Alt field - manual entry - not updated'); }); test('autoSize', function() { + expect(15); var inp = init('#inp'); - equals(inp.attr('size'), 0, 'Auto size - default'); + equal(inp.attr('size'), 0, 'Auto size - default'); inp.datepicker('option', 'autoSize', true); - equals(inp.attr('size'), 10, 'Auto size - mm/dd/yy'); - inp.datepicker('option', 'dateFormat', 'm/d/yy'); - equals(inp.attr('size'), 10, 'Auto size - m/d/yy'); - inp.datepicker('option', 'dateFormat', 'D M d yy'); - equals(inp.attr('size'), 15, 'Auto size - D M d yy'); - inp.datepicker('option', 'dateFormat', 'DD, MM dd, yy'); - equals(inp.attr('size'), 29, 'Auto size - DD, MM dd, yy'); + equal(inp.attr('size'), 10, 'Auto size - mm/dd/yyyy'); + inp.datepicker('option', 'dateFormat', 'm/d/yyyy'); + equal(inp.attr('size'), 10, 'Auto size - m/d/yyyy'); + inp.datepicker('option', 'dateFormat', 'D M d yyyy'); + equal(inp.attr('size'), 15, 'Auto size - D M d yyyy'); + inp.datepicker('option', 'dateFormat', 'DD, MM dd, yyyy'); + equal(inp.attr('size'), 29, 'Auto size - DD, MM dd, yyyy'); inp.removeAttr('size'); // French - inp.datepicker('option', $.extend({autoSize: false}, $.datepicker.regional['fr'])); - equals(inp.attr('size'), 0, 'Auto size - fr - default'); + inp.datepicker('option', $.extend({autoSize: false}, $.ui.datepicker.regional['fr'])); + equal(inp.attr('size'), 0, 'Auto size - fr - default'); inp.datepicker('option', 'autoSize', true); - equals(inp.attr('size'), 10, 'Auto size - fr - dd/mm/yy'); - inp.datepicker('option', 'dateFormat', 'm/d/yy'); - equals(inp.attr('size'), 10, 'Auto size - fr - m/d/yy'); - inp.datepicker('option', 'dateFormat', 'D M d yy'); - equals(inp.attr('size'), 15, 'Auto size - fr - D M d yy'); - inp.datepicker('option', 'dateFormat', 'DD, MM dd, yy'); - equals(inp.attr('size'), 28, 'Auto size - fr - DD, MM dd, yy'); + equal(inp.attr('size'), 10, 'Auto size - fr - dd/mm/yyyy'); + inp.datepicker('option', 'dateFormat', 'm/d/yyyy'); + equal(inp.attr('size'), 10, 'Auto size - fr - m/d/yyyy'); + inp.datepicker('option', 'dateFormat', 'D M d yyyy'); + equal(inp.attr('size'), 15, 'Auto size - fr - D M d yyyy'); + inp.datepicker('option', 'dateFormat', 'DD, MM dd, yyyy'); + equal(inp.attr('size'), 28, 'Auto size - fr - DD, MM dd, yyyy'); inp.removeAttr('size'); // Hebrew - inp.datepicker('option', $.extend({autoSize: false}, $.datepicker.regional['he'])); - equals(inp.attr('size'), 0, 'Auto size - he - default'); + inp.datepicker('option', $.extend({autoSize: false}, $.ui.datepicker.regional['he'])); + equal(inp.attr('size'), 0, 'Auto size - he - default'); inp.datepicker('option', 'autoSize', true); - equals(inp.attr('size'), 10, 'Auto size - he - dd/mm/yy'); - inp.datepicker('option', 'dateFormat', 'm/d/yy'); - equals(inp.attr('size'), 10, 'Auto size - he - m/d/yy'); - inp.datepicker('option', 'dateFormat', 'D M d yy'); - equals(inp.attr('size'), 14, 'Auto size - he - D M d yy'); - inp.datepicker('option', 'dateFormat', 'DD, MM dd, yy'); - equals(inp.attr('size'), 23, 'Auto size - he - DD, MM dd, yy'); + equal(inp.attr('size'), 10, 'Auto size - he - dd/mm/yyyy'); + inp.datepicker('option', 'dateFormat', 'm/d/yyyy'); + equal(inp.attr('size'), 10, 'Auto size - he - m/d/yyyy'); + inp.datepicker('option', 'dateFormat', 'D M d yyyy'); + equal(inp.attr('size'), 14, 'Auto size - he - D M d yyyy'); + inp.datepicker('option', 'dateFormat', 'DD, MM dd, yyyy'); + equal(inp.attr('size'), 23, 'Auto size - he - DD, MM dd, yyyy'); inp.removeAttr('size'); }); test('daylightSaving', function() { + expect(25); var inp = init('#inp'); - var dp = $('#ui-datepicker-div'); ok(true, 'Daylight saving - ' + new Date()); // Australia, Sydney - AM change, southern hemisphere inp.val('04/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(6) a', dp).simulate('click'); - equals(inp.val(), '04/05/2008', 'Daylight saving - Australia 04/05/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(6) a').click(); + equal(inp.val(), '04/05/2008', 'Daylight saving - Australia 04/05/2008'); inp.val('04/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(7) a', dp).simulate('click'); - equals(inp.val(), '04/06/2008', 'Daylight saving - Australia 04/06/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(7) a').click(); + equal(inp.val(), '04/06/2008', 'Daylight saving - Australia 04/06/2008'); inp.val('04/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(8) a', dp).simulate('click'); - equals(inp.val(), '04/07/2008', 'Daylight saving - Australia 04/07/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(8) a').click(); + equal(inp.val(), '04/07/2008', 'Daylight saving - Australia 04/07/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(6) a', dp).simulate('click'); - equals(inp.val(), '10/04/2008', 'Daylight saving - Australia 10/04/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(6) a').click(); + equal(inp.val(), '10/04/2008', 'Daylight saving - Australia 10/04/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(7) a', dp).simulate('click'); - equals(inp.val(), '10/05/2008', 'Daylight saving - Australia 10/05/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(7) a').click(); + equal(inp.val(), '10/05/2008', 'Daylight saving - Australia 10/05/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(8) a', dp).simulate('click'); - equals(inp.val(), '10/06/2008', 'Daylight saving - Australia 10/06/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(8) a').click(); + equal(inp.val(), '10/06/2008', 'Daylight saving - Australia 10/06/2008'); // Brasil, Brasilia - midnight change, southern hemisphere inp.val('02/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(20) a', dp).simulate('click'); - equals(inp.val(), '02/16/2008', 'Daylight saving - Brasil 02/16/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(20) a').click(); + equal(inp.val(), '02/16/2008', 'Daylight saving - Brasil 02/16/2008'); inp.val('02/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(21) a', dp).simulate('click'); - equals(inp.val(), '02/17/2008', 'Daylight saving - Brasil 02/17/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(21) a').click(); + equal(inp.val(), '02/17/2008', 'Daylight saving - Brasil 02/17/2008'); inp.val('02/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(22) a', dp).simulate('click'); - equals(inp.val(), '02/18/2008', 'Daylight saving - Brasil 02/18/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(22) a').click(); + equal(inp.val(), '02/18/2008', 'Daylight saving - Brasil 02/18/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(13) a', dp).simulate('click'); - equals(inp.val(), '10/11/2008', 'Daylight saving - Brasil 10/11/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(13) a').click(); + equal(inp.val(), '10/11/2008', 'Daylight saving - Brasil 10/11/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(14) a', dp).simulate('click'); - equals(inp.val(), '10/12/2008', 'Daylight saving - Brasil 10/12/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(14) a').click(); + equal(inp.val(), '10/12/2008', 'Daylight saving - Brasil 10/12/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(15) a', dp).simulate('click'); - equals(inp.val(), '10/13/2008', 'Daylight saving - Brasil 10/13/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(15) a').click(); + equal(inp.val(), '10/13/2008', 'Daylight saving - Brasil 10/13/2008'); // Lebanon, Beirut - midnight change, northern hemisphere inp.val('03/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(34) a', dp).simulate('click'); - equals(inp.val(), '03/29/2008', 'Daylight saving - Lebanon 03/29/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(34) a').click(); + equal(inp.val(), '03/29/2008', 'Daylight saving - Lebanon 03/29/2008'); inp.val('03/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(35) a', dp).simulate('click'); - equals(inp.val(), '03/30/2008', 'Daylight saving - Lebanon 03/30/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(35) a').click(); + equal(inp.val(), '03/30/2008', 'Daylight saving - Lebanon 03/30/2008'); inp.val('03/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(36) a', dp).simulate('click'); - equals(inp.val(), '03/31/2008', 'Daylight saving - Lebanon 03/31/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(36) a').click(); + equal(inp.val(), '03/31/2008', 'Daylight saving - Lebanon 03/31/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(27) a', dp).simulate('click'); - equals(inp.val(), '10/25/2008', 'Daylight saving - Lebanon 10/25/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(27) a').click(); + equal(inp.val(), '10/25/2008', 'Daylight saving - Lebanon 10/25/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(28) a', dp).simulate('click'); - equals(inp.val(), '10/26/2008', 'Daylight saving - Lebanon 10/26/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(28) a').click(); + equal(inp.val(), '10/26/2008', 'Daylight saving - Lebanon 10/26/2008'); inp.val('10/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(29) a', dp).simulate('click'); - equals(inp.val(), '10/27/2008', 'Daylight saving - Lebanon 10/27/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(29) a').click(); + equal(inp.val(), '10/27/2008', 'Daylight saving - Lebanon 10/27/2008'); // US, Eastern - AM change, northern hemisphere inp.val('03/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(13) a', dp).simulate('click'); - equals(inp.val(), '03/08/2008', 'Daylight saving - US 03/08/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(13) a').click(); + equal(inp.val(), '03/08/2008', 'Daylight saving - US 03/08/2008'); inp.val('03/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(14) a', dp).simulate('click'); - equals(inp.val(), '03/09/2008', 'Daylight saving - US 03/09/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(14) a').click(); + equal(inp.val(), '03/09/2008', 'Daylight saving - US 03/09/2008'); inp.val('03/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(15) a', dp).simulate('click'); - equals(inp.val(), '03/10/2008', 'Daylight saving - US 03/10/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(15) a').click(); + equal(inp.val(), '03/10/2008', 'Daylight saving - US 03/10/2008'); inp.val('11/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(6) a', dp).simulate('click'); - equals(inp.val(), '11/01/2008', 'Daylight saving - US 11/01/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(6) a').click(); + equal(inp.val(), '11/01/2008', 'Daylight saving - US 11/01/2008'); inp.val('11/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(7) a', dp).simulate('click'); - equals(inp.val(), '11/02/2008', 'Daylight saving - US 11/02/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(7) a').click(); + equal(inp.val(), '11/02/2008', 'Daylight saving - US 11/02/2008'); inp.val('11/01/2008').datepicker('show'); - $('.ui-datepicker-calendar td:eq(8) a', dp).simulate('click'); - equals(inp.val(), '11/03/2008', 'Daylight saving - US 11/03/2008'); + $('#ui-datepicker-div .ui-datepicker-calendar td:eq(8) a').click(); + equal(inp.val(), '11/03/2008', 'Daylight saving - US 11/03/2008'); }); -var beforeShowThis = null; -var beforeShowInput = null; -var beforeShowInst = null; - -function beforeAll(input, inst) { - beforeShowThis = this; - beforeShowInput = input; - beforeShowInst = inst; - return {currentText: 'Current'}; -} - -var beforeShowDayThis = null; -var beforeShowDayOK = true; +var beforeDayThis = null; +var beforeDayOK = true; function beforeDay(date) { - beforeShowDayThis = this; - beforeShowDayOK &= (date > new Date(2008, 1 - 1, 26) && - date < new Date(2008, 3 - 1, 6)); - return [(date.getDate() % 2 == 0), (date.getDate() % 10 == 0 ? 'day10' : ''), - (date.getDate() % 3 == 0 ? 'Divisble by 3' : '')]; + beforeDayThis = this; + beforeDayOK &= (date > new Date(2008, 1 - 1, 26) && date < new Date(2008, 3 - 1, 6)); + return {selectable: (date.getDate() % 2 == 0), dateClass: (date.getDate() % 10 == 0 ? 'day10' : ''), + title: (date.getDate() % 3 == 0 ? 'Divisble by 3' : '')}; } function calcWeek(date) { var doy = date.getDate() + 6; for (var m = date.getMonth() - 1; m >= 0; m--) - doy += $.datepicker._getDaysInMonth(date.getFullYear(), m); + doy += $.ui.datepicker._getDaysInMonth(date.getFullYear(), m); // Simple count from 01/01 starting at week 1 return Math.floor(doy / 7); } test('callbacks', function() { - // Before show - var inp = init('#inp', {beforeShow: beforeAll}); - var inst = $.data(inp[0], 'datepicker'); - equals($.datepicker._get(inst, 'currentText'), 'Today', 'Before show - initial'); + expect(8); + // on date + inp = init('#inp', {onDate: beforeDay}); inp.val('02/04/2008').datepicker('show'); - equals($.datepicker._get(inst, 'currentText'), 'Current', 'Before show - changed'); - ok(beforeShowThis.id == inp[0].id, 'Before show - this OK'); - ok(beforeShowInput.id == inp[0].id, 'Before show - input OK'); - deepEqual(beforeShowInst, inst, 'Before show - inst OK'); - inp.datepicker('hide').datepicker('destroy'); - // Before show day - inp = init('#inp', {beforeShowDay: beforeDay}); var dp = $('#ui-datepicker-div'); - inp.val('02/04/2008').datepicker('show'); - ok(beforeShowDayThis.id == inp[0].id, 'Before show day - this OK'); - ok(beforeShowDayOK, 'Before show day - dates OK'); - var day20 = dp.find('.ui-datepicker-calendar td:contains("20")'); - var day21 = dp.find('.ui-datepicker-calendar td:contains("21")'); - ok(!day20.is('.ui-datepicker-unselectable'), 'Before show day - unselectable 20'); - ok(day21.is('.ui-datepicker-unselectable'), 'Before show day - unselectable 21'); + ok(beforeDayThis.id == inp[0].id, 'Before show day - this OK'); + ok(beforeDayOK, 'Before show day - dates OK'); + var day20 = dp.find('.ui-datepicker-calendar td :contains("20")'); + var day21 = dp.find('.ui-datepicker-calendar td :contains("21")'); + ok(day20.is('a'), 'Before show day - unselectable 20'); + ok(day21.is('span'), 'Before show day - unselectable 21'); ok(day20.is('.day10'), 'Before show day - CSS 20'); ok(!day21.is('.day10'), 'Before show day - CSS 21'); - ok(day20.attr('title') == '', 'Before show day - title 20'); - ok(day21.attr('title') == 'Divisble by 3', 'Before show day - title 21'); + equal(day20.attr('title'), 'Select Wednesday, Feb 20, 2008', 'Before show day - title 20'); + equal(day21.attr('title'), 'Divisble by 3', 'Before show day - title 21'); inp.datepicker('hide').datepicker('destroy'); }); test('localisation', function() { - var inp = init('#inp', $.datepicker.regional['fr']); - inp.datepicker('option', {dateFormat: 'DD, d MM yy', showButtonPanel:true, changeMonth:true, changeYear:true}).val('').datepicker('show'); + expect(24); + var inp = init('#inp', $.ui.datepicker.regional['fr']); + inp.datepicker('option', {dateFormat: 'DD, d MM yyyy', + renderer: $.ui.datepicker.buttonsRenderer, changeMonth: true}). + val('').datepicker('show'); var dp = $('#ui-datepicker-div'); - equals($('.ui-datepicker-close', dp).text(), 'Fermer', 'Localisation - close'); - $('.ui-datepicker-close', dp).simulate('mouseover'); - equals($('.ui-datepicker-prev', dp).text(), '', 'Localisation - next'); + equal($('.ui-datepicker-cmd-close', dp).text(), 'Fermer', 'Localisation - close'); + equal($('.ui-datepicker-cmd-prev', dp).text(), '', 'Localisation - next'); var month = 0; - $('.ui-datepicker-month option', dp).each(function() { - equals($(this).text(), $.datepicker.regional['fr'].monthNamesShort[month], + $('.ui-datepicker-month-year:first option', dp).each(function() { + equal($(this).text(), $.ui.datepicker.regional['fr'].monthNamesShort[month], 'Localisation - month ' + month); month++; }); var day = 1; $('.ui-datepicker-calendar th', dp).each(function() { - equals($(this).text(), $.datepicker.regional['fr'].dayNamesMin[day], + equal($(this).text(), $.ui.datepicker.regional['fr'].dayNamesMin[day], 'Localisation - day ' + day); day = (day + 1) % 7; }); inp.simulate('keydown', {keyCode: $.simulate.VK_ENTER}); var date = new Date(); - equals(inp.val(), $.datepicker.regional['fr'].dayNames[date.getDay()] + ', ' + - date.getDate() + ' ' + $.datepicker.regional['fr'].monthNames[date.getMonth()] + + equal(inp.val(), $.ui.datepicker.regional['fr'].dayNames[date.getDay()] + ', ' + + date.getDate() + ' ' + $.ui.datepicker.regional['fr'].monthNames[date.getMonth()] + ' ' + date.getFullYear(), 'Localisation - formatting'); }); test('noWeekends', function() { + expect(31); for (var i = 1; i <= 31; i++) { var date = new Date(2001, 1 - 1, i); - deepEqual($.datepicker.noWeekends(date), [(i + 1) % 7 >= 2, ''], + deepEqual($.ui.datepicker.noWeekends(date), {selectable: (i + 1) % 7 >= 2}, 'No weekends ' + date); } }); test('iso8601Week', function() { + expect(12); var date = new Date(2000, 12 - 1, 31); - equals($.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date); date = new Date(2001, 1 - 1, 1); - equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); date = new Date(2001, 1 - 1, 7); - equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); date = new Date(2001, 1 - 1, 8); - equals($.datepicker.iso8601Week(date), 2, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 2, 'ISO 8601 week ' + date); date = new Date(2003, 12 - 1, 28); - equals($.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date); date = new Date(2003, 12 - 1, 29); - equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); date = new Date(2004, 1 - 1, 4); - equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); date = new Date(2004, 1 - 1, 5); - equals($.datepicker.iso8601Week(date), 2, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 2, 'ISO 8601 week ' + date); date = new Date(2009, 12 - 1, 28); - equals($.datepicker.iso8601Week(date), 53, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 53, 'ISO 8601 week ' + date); date = new Date(2010, 1 - 1, 3); - equals($.datepicker.iso8601Week(date), 53, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 53, 'ISO 8601 week ' + date); date = new Date(2010, 1 - 1, 4); - equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); date = new Date(2010, 1 - 1, 10); - equals($.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); + equal($.ui.datepicker.iso8601Week(date), 1, 'ISO 8601 week ' + date); }); test('parseDate', function() { + expect(22); init('#inp'); - ok($.datepicker.parseDate('d m y', '') == null, 'Parse date empty'); - equalsDate($.datepicker.parseDate('d m y', '3 2 01'), - new Date(2001, 2 - 1, 3), 'Parse date d m y'); - equalsDate($.datepicker.parseDate('dd mm yy', '03 02 2001'), - new Date(2001, 2 - 1, 3), 'Parse date dd mm yy'); - equalsDate($.datepicker.parseDate('d m y', '13 12 01'), - new Date(2001, 12 - 1, 13), 'Parse date d m y'); - equalsDate($.datepicker.parseDate('dd mm yy', '13 12 2001'), - new Date(2001, 12 - 1, 13), 'Parse date dd mm yy'); - equalsDate($.datepicker.parseDate('y-o', '2001-34'), - new Date(2001, 2 - 1, 3), 'Parse date y-o'); - equalsDate($.datepicker.parseDate('yy-oo', '2001-347'), - new Date(2001, 12 - 1, 13), 'Parse date yy oo'); - equalsDate($.datepicker.parseDate('oo yy', '348 2004'), - new Date(2004, 12 - 1, 13), 'Parse date oo-yy'); - equalsDate($.datepicker.parseDate('D d M y', 'Sat 3 Feb 01'), - new Date(2001, 2 - 1, 3), 'Parse date D d M y'); - equalsDate($.datepicker.parseDate('d MM DD yy', '3 February Saturday 2001'), - new Date(2001, 2 - 1, 3), 'Parse date dd MM DD yy'); - equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Saturday, February 3, 2001'), - new Date(2001, 2 - 1, 3), 'Parse date DD, MM d, yy'); - equalsDate($.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', + equal($.ui.datepicker.parseDate('d m yy', ''), null, 'Parse date empty'); + equalDate($.ui.datepicker.parseDate('d m yy', '3 2 01'), + new Date(2001, 2 - 1, 3), 'Parse date d m yy'); + equalDate($.ui.datepicker.parseDate('dd mm yyyy', '03 02 2001'), + new Date(2001, 2 - 1, 3), 'Parse date dd mm yyyy'); + equalDate($.ui.datepicker.parseDate('d m yy', '13 12 01'), + new Date(2001, 12 - 1, 13), 'Parse date d m yy'); + equalDate($.ui.datepicker.parseDate('dd mm yyyy', '13 12 2001'), + new Date(2001, 12 - 1, 13), 'Parse date dd mm yyyy'); + equalDate($.ui.datepicker.parseDate('yy-o', '2001-34'), + new Date(2001, 2 - 1, 3), 'Parse date yy-o'); + equalDate($.ui.datepicker.parseDate('yyyy-oo', '2001-347'), + new Date(2001, 12 - 1, 13), 'Parse date yyyy oo'); + equalDate($.ui.datepicker.parseDate('oo yyyy', '348 2004'), + new Date(2004, 12 - 1, 13), 'Parse date oo-yyyy'); + equalDate($.ui.datepicker.parseDate('D d M yy', 'Sat 3 Feb 01'), + new Date(2001, 2 - 1, 3), 'Parse date D d M yy'); + equalDate($.ui.datepicker.parseDate('d MM DD yyyy', '3 February Saturday 2001'), + new Date(2001, 2 - 1, 3), 'Parse date dd MM DD yyyy'); + equalDate($.ui.datepicker.parseDate('DD, MM d, yyyy', 'Saturday, February 3, 2001'), + new Date(2001, 2 - 1, 3), 'Parse date DD, MM d, yyyy'); + equalDate($.ui.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yyyy', 'day 3 of February (\'Saturday\'), 2001'), new Date(2001, 2 - 1, 3), - 'Parse date \'day\' d \'of\' MM (\'\'DD\'\'), yy'); - equalsDate($.datepicker.parseDate('y-m-d', '01-02-03'), - new Date(2001, 2 - 1, 3), 'Parse date y-m-d - default cutoff'); - equalsDate($.datepicker.parseDate('y-m-d', '51-02-03'), - new Date(1951, 2 - 1, 3), 'Parse date y-m-d - default cutoff'); - equalsDate($.datepicker.parseDate('y-m-d', '51-02-03', {shortYearCutoff: 80}), - new Date(2051, 2 - 1, 3), 'Parse date y-m-d - cutoff 80'); - equalsDate($.datepicker.parseDate('y-m-d', '51-02-03', {shortYearCutoff: '+60'}), - new Date(2051, 2 - 1, 3), 'Parse date y-m-d - cutoff +60'); + 'Parse date \'day\' d \'of\' MM (\'\'DD\'\'), yyyy'); + equalDate($.ui.datepicker.parseDate('yy-m-d', '01-02-03'), + new Date(2001, 2 - 1, 3), 'Parse date yy-m-d - default cutoff'); + equalDate($.ui.datepicker.parseDate('yy-m-d', '51-02-03'), + new Date(1951, 2 - 1, 3), 'Parse date yy-m-d - default cutoff'); + equalDate($.ui.datepicker.parseDate('yy-m-d', '51-02-03', {shortYearCutoff: 80}), + new Date(2051, 2 - 1, 3), 'Parse date yy-m-d - cutoff 80'); + equalDate($.ui.datepicker.parseDate('yy-m-d', '51-02-03', {shortYearCutoff: '+60'}), + new Date(2051, 2 - 1, 3), 'Parse date yy-m-d - cutoff +60'); var gmtDate = new Date(2001, 2 - 1, 3); gmtDate.setMinutes(gmtDate.getMinutes() - gmtDate.getTimezoneOffset()); - equalsDate($.datepicker.parseDate('@', '981158400000'), gmtDate, 'Parse date @'); - equalsDate($.datepicker.parseDate('!', '631167552000000000'), gmtDate, 'Parse date !'); - var fr = $.datepicker.regional['fr']; + equalDate($.ui.datepicker.parseDate('@', '981158400'), gmtDate, 'Parse date @'); + equalDate($.ui.datepicker.parseDate('!', '631167552000000000'), gmtDate, 'Parse date !'); + var fr = $.ui.datepicker.regional['fr']; var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; - equalsDate($.datepicker.parseDate('D d M y', 'Lun 9 Avr 01', settings), - new Date(2001, 4 - 1, 9), 'Parse date D M y with settings'); - equalsDate($.datepicker.parseDate('d MM DD yy', '9 Avril Lundi 2001', settings), - new Date(2001, 4 - 1, 9), 'Parse date d MM DD yy with settings'); - equalsDate($.datepicker.parseDate('DD, MM d, yy', 'Lundi, Avril 9, 2001', settings), + equalDate($.ui.datepicker.parseDate('D d M yy', 'Lun 9 Avr 01', settings), + new Date(2001, 4 - 1, 9), 'Parse date D M yy with settings'); + equalDate($.ui.datepicker.parseDate('d MM DD yyyy', '9 Avril Lundi 2001', settings), + new Date(2001, 4 - 1, 9), 'Parse date d MM DD yyyy with settings'); + equalDate($.ui.datepicker.parseDate('DD, MM d, yyyy', 'Lundi, Avril 9, 2001', settings), new Date(2001, 4 - 1, 9), 'Parse date DD, MM d, yy with settings'); - equalsDate($.datepicker.parseDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy', + equalDate($.ui.datepicker.parseDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yyyy', 'jour 9 de Avril (\'Lundi\'), 2001', settings), new Date(2001, 4 - 1, 9), - 'Parse date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings'); + 'Parse date \'jour\' d \'de\' MM (\'\'DD\'\'), yyyy with settings'); }); test('parseDateErrors', function() { + expect(17); init('#inp'); - var expectError = function(expr, value, error) { + var expectError = function(callback, value, error) { try { - expr(); + callback(); ok(false, 'Parsed error ' + value); } catch (e) { - equals(e, error, 'Parsed error ' + value); + equal(e, error, 'Parsed error ' + value); } }; - expectError(function() { $.datepicker.parseDate(null, 'Sat 2 01'); }, + expectError(function() { $.ui.datepicker.parseDate(null, 'Sat 2 01'); }, 'Sat 2 01', 'Invalid arguments'); - expectError(function() { $.datepicker.parseDate('d m y', null); }, + expectError(function() { $.ui.datepicker.parseDate('d m yy', null); }, 'null', 'Invalid arguments'); - expectError(function() { $.datepicker.parseDate('d m y', 'Sat 2 01'); }, - 'Sat 2 01 - d m y', 'Missing number at position 0'); - expectError(function() { $.datepicker.parseDate('dd mm yy', 'Sat 2 01'); }, - 'Sat 2 01 - dd mm yy', 'Missing number at position 0'); - expectError(function() { $.datepicker.parseDate('d m y', '3 Feb 01'); }, - '3 Feb 01 - d m y', 'Missing number at position 2'); - expectError(function() { $.datepicker.parseDate('dd mm yy', '3 Feb 01'); }, - '3 Feb 01 - dd mm yy', 'Missing number at position 2'); - expectError(function() { $.datepicker.parseDate('d m y', '3 2 AD01'); }, - '3 2 AD01 - d m y', 'Missing number at position 4'); - expectError(function() { $.datepicker.parseDate('d m yy', '3 2 AD01'); }, - '3 2 AD01 - dd mm yy', 'Missing number at position 4'); - expectError(function() { $.datepicker.parseDate('y-o', '2001-D01'); }, - '2001-D01 - y-o', 'Missing number at position 5'); - expectError(function() { $.datepicker.parseDate('yy-oo', '2001-D01'); }, - '2001-D01 - yy-oo', 'Missing number at position 5'); - expectError(function() { $.datepicker.parseDate('D d M y', 'D7 3 Feb 01'); }, - 'D7 3 Feb 01 - D d M y', 'Unknown name at position 0'); - expectError(function() { $.datepicker.parseDate('D d M y', 'Sat 3 M2 01'); }, - 'Sat 3 M2 01 - D d M y', 'Unknown name at position 6'); - expectError(function() { $.datepicker.parseDate('DD, MM d, yy', 'Saturday- Feb 3, 2001'); }, - 'Saturday- Feb 3, 2001 - DD, MM d, yy', 'Unexpected literal at position 8'); - expectError(function() { $.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', + expectError(function() { $.ui.datepicker.parseDate('d m yy', 'Sat 2 01'); }, + 'Sat 2 01 - d m yy', 'Missing number at position 0'); + expectError(function() { $.ui.datepicker.parseDate('dd mm yyyy', 'Sat 2 01'); }, + 'Sat 2 01 - dd mm yyyy', 'Missing number at position 0'); + expectError(function() { $.ui.datepicker.parseDate('d m yy', '3 Feb 01'); }, + '3 Feb 01 - d m yy', 'Missing number at position 2'); + expectError(function() { $.ui.datepicker.parseDate('dd mm yyyy', '3 Feb 01'); }, + '3 Feb 01 - dd mm yyyy', 'Missing number at position 2'); + expectError(function() { $.ui.datepicker.parseDate('d m yy', '3 2 AD01'); }, + '3 2 AD01 - d m yy', 'Missing number at position 4'); + expectError(function() { $.ui.datepicker.parseDate('d m yyyy', '3 2 AD01'); }, + '3 2 AD01 - dd mm yyyy', 'Missing number at position 4'); + expectError(function() { $.ui.datepicker.parseDate('yy-o', '2001-D01'); }, + '2001-D01 - yy-o', 'Missing number at position 5'); + expectError(function() { $.ui.datepicker.parseDate('yyyy-oo', '2001-D01'); }, + '2001-D01 - yyyy-oo', 'Missing number at position 5'); + expectError(function() { $.ui.datepicker.parseDate('D d M yy', 'D7 3 Feb 01'); }, + 'D7 3 Feb 01 - D d M yy', 'Unknown name at position 0'); + expectError(function() { $.ui.datepicker.parseDate('D d M yy', 'Sat 3 M2 01'); }, + 'Sat 3 M2 01 - D d M yy', 'Unknown name at position 6'); + expectError(function() { $.ui.datepicker.parseDate('DD, MM d, yyyy', 'Saturday- Feb 3, 2001'); }, + 'Saturday- Feb 3, 2001 - DD, MM d, yyyy', 'Unexpected literal at position 8'); + expectError(function() { $.ui.datepicker.parseDate('\'day\' d \'of\' MM (\'\'DD\'\'), yyyy', 'day 3 of February ("Saturday"), 2001'); }, 'day 3 of Mon2 ("Day7"), 2001', 'Unexpected literal at position 19'); - expectError(function() { $.datepicker.parseDate('d m y', '29 2 01'); }, - '29 2 01 - d m y', 'Invalid date'); - var fr = $.datepicker.regional['fr']; + expectError(function() { $.ui.datepicker.parseDate('d m yy', '29 2 01'); }, + '29 2 01 - d m yy', 'Invalid date'); + var fr = $.ui.datepicker.regional['fr']; var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; - expectError(function() { $.datepicker.parseDate('D d M y', 'Mon 9 Avr 01', settings); }, - 'Mon 9 Avr 01 - D d M y', 'Unknown name at position 0'); - expectError(function() { $.datepicker.parseDate('D d M y', 'Lun 9 Apr 01', settings); }, - 'Lun 9 Apr 01 - D d M y', 'Unknown name at position 6'); + expectError(function() { $.ui.datepicker.parseDate('D d M yy', 'Mon 9 Avr 01', settings); }, + 'Mon 9 Avr 01 - D d M yy', 'Unknown name at position 0'); + expectError(function() { $.ui.datepicker.parseDate('D d M yy', 'Lun 9 Apr 01', settings); }, + 'Lun 9 Apr 01 - D d M yy', 'Unknown name at position 6'); }); test('formatDate', function() { + expect(16); init('#inp'); - equals($.datepicker.formatDate('d m y', new Date(2001, 2 - 1, 3)), - '3 2 01', 'Format date d m y'); - equals($.datepicker.formatDate('dd mm yy', new Date(2001, 2 - 1, 3)), - '03 02 2001', 'Format date dd mm yy'); - equals($.datepicker.formatDate('d m y', new Date(2001, 12 - 1, 13)), - '13 12 01', 'Format date d m y'); - equals($.datepicker.formatDate('dd mm yy', new Date(2001, 12 - 1, 13)), - '13 12 2001', 'Format date dd mm yy'); - equals($.datepicker.formatDate('yy-o', new Date(2001, 2 - 1, 3)), - '2001-34', 'Format date yy-o'); - equals($.datepicker.formatDate('yy-oo', new Date(2001, 2 - 1, 3)), - '2001-034', 'Format date yy-oo'); - equals($.datepicker.formatDate('D M y', new Date(2001, 2 - 1, 3)), - 'Sat Feb 01', 'Format date D M y'); - equals($.datepicker.formatDate('DD MM yy', new Date(2001, 2 - 1, 3)), - 'Saturday February 2001', 'Format date DD MM yy'); - equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 2 - 1, 3)), - 'Saturday, February 3, 2001', 'Format date DD, MM d, yy'); - equals($.datepicker.formatDate('\'day\' d \'of\' MM (\'\'DD\'\'), yy', + equal($.ui.datepicker.formatDate('d m yy', new Date(2001, 2 - 1, 3)), + '3 2 01', 'Format date d m yy'); + equal($.ui.datepicker.formatDate('dd mm yyyy', new Date(2001, 2 - 1, 3)), + '03 02 2001', 'Format date dd mm yyyy'); + equal($.ui.datepicker.formatDate('d m yy', new Date(2001, 12 - 1, 13)), + '13 12 01', 'Format date d m yy'); + equal($.ui.datepicker.formatDate('dd mm yyyy', new Date(2001, 12 - 1, 13)), + '13 12 2001', 'Format date dd mm yyyy'); + equal($.ui.datepicker.formatDate('yyyy-o', new Date(2001, 2 - 1, 3)), + '2001-34', 'Format date yyyy-o'); + equal($.ui.datepicker.formatDate('yyyy-oo', new Date(2001, 2 - 1, 3)), + '2001-034', 'Format date yyyy-oo'); + equal($.ui.datepicker.formatDate('D M yy', new Date(2001, 2 - 1, 3)), + 'Sat Feb 01', 'Format date D M yy'); + equal($.ui.datepicker.formatDate('DD MM yyyy', new Date(2001, 2 - 1, 3)), + 'Saturday February 2001', 'Format date DD MM yyyy'); + equal($.ui.datepicker.formatDate('DD, MM d, yyyy', new Date(2001, 2 - 1, 3)), + 'Saturday, February 3, 2001', 'Format date DD, MM d, yyyy'); + equal($.ui.datepicker.formatDate('\'day\' d \'of\' MM (\'\'DD\'\'), yyyy', new Date(2001, 2 - 1, 3)), 'day 3 of February (\'Saturday\'), 2001', - 'Format date \'day\' d \'of\' MM (\'\'DD\'\'), yy'); + 'Format date \'day\' d \'of\' MM (\'\'DD\'\'), yyyy'); var gmtDate = new Date(2001, 2 - 1, 3); gmtDate.setMinutes(gmtDate.getMinutes() - gmtDate.getTimezoneOffset()); - equals($.datepicker.formatDate('@', gmtDate), '981158400000', 'Format date @'); - equals($.datepicker.formatDate('!', gmtDate), '631167552000000000', 'Format date !'); - var fr = $.datepicker.regional['fr']; + equal($.ui.datepicker.formatDate('@', gmtDate), '981158400', 'Format date @'); + equal($.ui.datepicker.formatDate('!', gmtDate), '631167552000000000', 'Format date !'); + var fr = $.ui.datepicker.regional['fr']; var settings = {dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames, monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames}; - equals($.datepicker.formatDate('D M y', new Date(2001, 4 - 1, 9), settings), - 'Lun Avr 01', 'Format date D M y with settings'); - equals($.datepicker.formatDate('DD MM yy', new Date(2001, 4 - 1, 9), settings), - 'Lundi Avril 2001', 'Format date DD MM yy with settings'); - equals($.datepicker.formatDate('DD, MM d, yy', new Date(2001, 4 - 1, 9), settings), - 'Lundi, Avril 9, 2001', 'Format date DD, MM d, yy with settings'); - equals($.datepicker.formatDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy', + equal($.ui.datepicker.formatDate('D M yy', new Date(2001, 4 - 1, 9), settings), + 'Lun Avr 01', 'Format date D M yy with settings'); + equal($.ui.datepicker.formatDate('DD MM yyyy', new Date(2001, 4 - 1, 9), settings), + 'Lundi Avril 2001', 'Format date DD MM yyyy with settings'); + equal($.ui.datepicker.formatDate('DD, MM d, yyyy', new Date(2001, 4 - 1, 9), settings), + 'Lundi, Avril 9, 2001', 'Format date DD, MM d, yyyy with settings'); + equal($.ui.datepicker.formatDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yyyy', new Date(2001, 4 - 1, 9), settings), 'jour 9 de Avril (\'Lundi\'), 2001', - 'Format date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings'); + 'Format date \'jour\' d \'de\' MM (\'\'DD\'\'), yyyy with settings'); }); })(jQuery); diff --git a/tests/unit/datepicker/datepicker_tickets.js b/tests/unit/datepicker/datepicker_tickets.js index 85598f94936..38c5e89f32c 100644 --- a/tests/unit/datepicker/datepicker_tickets.js +++ b/tests/unit/datepicker/datepicker_tickets.js @@ -3,30 +3,6 @@ */ (function($) { -module("datepicker: tickets", { - teardown: function() { - stop(); - setTimeout(start, 13); - } -}); - -// http://forum.jquery.com/topic/several-breaking-changes-in-jquery-ui-1-8rc1 -test('beforeShowDay-getDate', function() { - var inp = init('#inp', {beforeShowDay: function(date) { inp.datepicker('getDate'); return [true, '']; }}); - var dp = $('#ui-datepicker-div'); - inp.val('01/01/2010').datepicker('show'); - // result has line-break instead of space inbetween, therefore comparsion fails - equals($('div.ui-datepicker-title').text(), 'January 2010', 'Initial month'); - $('a.ui-datepicker-next', dp).click(); - $('a.ui-datepicker-next', dp).click(); - // fails, see above - equals($('div.ui-datepicker-title').text(), 'March 2010', 'After next clicks'); - inp.datepicker('hide').datepicker('show'); - $('a.ui-datepicker-prev', dp).click(); - $('a.ui-datepicker-prev', dp).click(); - // fails, see above - equals($('div.ui-datepicker-title').text(), 'November 2009', 'After prev clicks'); - inp.datepicker('hide'); -}); +module("datepicker: tickets"); })(jQuery); diff --git a/tests/visual/datepicker/datepicker.html b/tests/visual/datepicker/datepicker.html index 760bcd94da1..9823c58aae3 100644 --- a/tests/visual/datepicker/datepicker.html +++ b/tests/visual/datepicker/datepicker.html @@ -11,13 +11,103 @@ -
+
    +
  • + + + + + Datepicker Simple +
    + +
    +
  • +
  • + + + + + Datepicker Multi +
    + +
    +
  • +
  • + + + + + Datepicker Inline +
    +
  • +
  • + Datepicker disabled input +
    + +
    +
  • +
  • + Datepicker - positioned bottom-right +
    + +
    +
  • +
diff --git a/themes/base/jquery.ui.datepicker.css b/themes/base/jquery.ui.datepicker.css index a1116e69c74..5e62c2f9a83 100644 --- a/themes/base/jquery.ui.datepicker.css +++ b/themes/base/jquery.ui.datepicker.css @@ -1,51 +1,65 @@ /* Datepicker ----------------------------------*/ +input.ui-datepicker, textarea.ui-datepicker { width: auto; } +.ui-datepicker-inline { position: relative; } .ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; text-align: center; } +.ui-datepicker .ui-icon { width: 16px; height: 16px; z-index: 11; text-indent: -999px; } +.ui-datepicker .ui-datepicker-cmd-prev, .ui-datepicker .ui-datepicker-cmd-next { position: absolute; top: 5px; } +.ui-datepicker .ui-datepicker-cmd-prev { left: 4px; background-position: -80px -192px; } +.ui-datepicker .ui-datepicker-cmd-next { right: 4px; background-position: -48px -192px; } +.ui-datepicker .ui-datepicker-cmd-prev:hover { left: 3px; top: 4px; } +.ui-datepicker .ui-datepicker-cmd-next:hover { right: 5px; top: 4px; } +.ui-datepicker .ui-datepicker-cmd-prevJump, .ui-datepicker .ui-datepicker-cmd-nextJump { position: absolute; top: 5px; } +.ui-datepicker .ui-datepicker-cmd-prevJump { left: 22px; background-position: -16px -192px; } +.ui-datepicker .ui-datepicker-cmd-nextJump { right: 22px; background-position: 0px -192px; } +.ui-datepicker .ui-datepicker-cmd-prevJump:hover { left: 21px; top: 4px; } +.ui-datepicker .ui-datepicker-cmd-nextJump:hover { right: 23px; top: 4px; } +.ui-datepicker .ui-datepicker-cmd-current, .ui-datepicker .ui-datepicker-cmd-today { background-position: -64px -192px; } +.ui-datepicker .ui-datepicker-cmd-clear { background-position: -32px -192px; } +.ui-datepicker .ui-datepicker-cmd-close { background-position: -208px -192px; } +.ui-icon.ui-datepicker-disabled { opacity: 0.5; cursor: default; } +.ui-datepicker-disabled .ui-datepicker-disabled { position: absolute; opacity: 0.5; cursor: default; } +.ui-datepicker .ui-datepicker-disabled.ui-datepicker-cmd-prev:hover { left: 4px; top: 5px; } +.ui-datepicker .ui-datepicker-disabled.ui-datepicker-cmd-next:hover { right: 4px; top: 5px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker select.ui-datepicker-month-year { width: auto; } +.ui-datepicker input.ui-datepicker-month-year { position: absolute; display: none; padding: 0px; border-width: 1px; } .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker th a { text-decoration: none; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } +.ui-datepicker button.ui-datepicker-cmd-close { float: right; } +.ui-datepicker button.ui-datepicker-cmd-today { float: left; } +.ui-datepicker-status { text-align: center; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group { float:left; padding: 0px 4px; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-cmd-prev { left: 8px; } +.ui-datepicker-multi .ui-datepicker-cmd-next { right: 8px; } +.ui-datepicker-multi .ui-datepicker-cmd-prev:hover { left: 7px; } +.ui-datepicker-multi .ui-datepicker-cmd-next:hover { right: 9px; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-icon { text-indent: 999px; } +.ui-datepicker-rtl .ui-datepicker-cmd-prev { right: 4px; left: auto; background-position: -48px -192px; } +.ui-datepicker-rtl .ui-datepicker-cmd-next { left: 4px; right: auto; background-position: -80px -192px; } +.ui-datepicker-rtl .ui-datepicker-cmd-prev:hover { right: 5px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-cmd-next:hover { left: 3px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-cmd-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { @@ -58,4 +72,4 @@ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ -} \ No newline at end of file +} diff --git a/ui/i18n/jquery.ui.datepicker-af.js b/ui/i18n/jquery.ui.datepicker-af.js index 43fbf6cd8e8..f034ca18da6 100644 --- a/ui/i18n/jquery.ui.datepicker-af.js +++ b/ui/i18n/jquery.ui.datepicker-af.js @@ -1,11 +1,8 @@ /* Afrikaans initialisation for the jQuery UI date picker plugin. */ /* Written by Renier Pretorius. */ -jQuery(function($){ - $.datepicker.regional['af'] = { - closeText: 'Selekteer', - prevText: 'Vorige', - nextText: 'Volgende', - currentText: 'Vandag', +(function($) { + $.ui.datepicker.regional['af'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', 'Julie','Augustus','September','Oktober','November','Desember'], monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['af']); -}); + prevText: 'Vorige', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Volgende', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Vandag', currentStatus: '', + todayText: 'Vandag', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Selekteer', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['af']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-ar.js b/ui/i18n/jquery.ui.datepicker-ar.js index c799b48d8e2..f5cac3d3d8f 100644 --- a/ui/i18n/jquery.ui.datepicker-ar.js +++ b/ui/i18n/jquery.ui.datepicker-ar.js @@ -2,23 +2,30 @@ /* Khaled Al Horani -- koko.dw@gmail.com */ /* خالد الحوراني -- koko.dw@gmail.com */ /* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name ÙØ¨Ø±Ø§ÙŠØ± - يناير and there isn't any Arabic roots for these months */ -jQuery(function($){ - $.datepicker.regional['ar'] = { - closeText: 'إغلاق', - prevText: '<السابق', - nextText: 'التالي>', - currentText: 'اليوم', +(function($) { + $.ui.datepicker.regional['ar'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'], dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], dayNamesMin: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], - weekHeader: 'أسبوع', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ar']); -}); \ No newline at end of file + prevText: '<السابق', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'التالي>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'اليوم', currentStatus: '', + todayText: 'اليوم', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'إغلاق', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'أسبوع', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: true + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['ar']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-az.js b/ui/i18n/jquery.ui.datepicker-az.js index b5434057b7f..c1b4aa9160f 100644 --- a/ui/i18n/jquery.ui.datepicker-az.js +++ b/ui/i18n/jquery.ui.datepicker-az.js @@ -1,11 +1,8 @@ /* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Jamil Najafov (necefov33@gmail.com). */ -jQuery(function($) { - $.datepicker.regional['az'] = { - closeText: 'BaÄŸla', - prevText: '<Geri', - nextText: 'İrÉ™li>', - currentText: 'Bugün', +(function($) { + $.ui.datepicker.regional['az'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', @@ -13,11 +10,21 @@ jQuery(function($) { dayNames: ['Bazar','Bazar ertÉ™si','ÇərÅŸÉ™nbÉ™ axÅŸamı','ÇərÅŸÉ™nbÉ™','CümÉ™ axÅŸamı','CümÉ™','ŞənbÉ™'], dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Åž'], dayNamesMin: ['B','B','Ç','С','Ç','C','Åž'], - weekHeader: 'Hf', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['az']); -}); \ No newline at end of file + prevText: '<Geri', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'İrÉ™li>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Bugün', currentStatus: '', + todayText: 'Bugün', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'BaÄŸla', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Hf', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['az']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-bg.js b/ui/i18n/jquery.ui.datepicker-bg.js index b5113f78170..8edfdd6c2da 100644 --- a/ui/i18n/jquery.ui.datepicker-bg.js +++ b/ui/i18n/jquery.ui.datepicker-bg.js @@ -1,12 +1,8 @@ /* Bulgarian initialisation for the jQuery UI date picker plugin. */ /* Written by Stoyan Kyosev (http://svest.org). */ -jQuery(function($){ - $.datepicker.regional['bg'] = { - closeText: 'затвори', - prevText: '<назад', - nextText: 'напред>', - nextBigText: '>>', - currentText: 'днеÑ', +(function($) { + $.ui.datepicker.regional['bg'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Януари','Февруари','Март','Ðприл','Май','Юни', 'Юли','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'], monthNamesShort: ['Яну','Фев','Мар','Ðпр','Май','Юни', @@ -14,11 +10,21 @@ jQuery(function($){ dayNames: ['ÐеделÑ','Понеделник','Вторник','СрÑда','Четвъртък','Петък','Събота'], dayNamesShort: ['Ðед','Пон','Вто','СрÑ','Чет','Пет','Съб'], dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Съ'], - weekHeader: 'Wk', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['bg']); -}); + prevText: '<назад', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'напред>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'днеÑ', currentStatus: '', + todayText: 'днеÑ', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'затвори', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['bg']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-bs.js b/ui/i18n/jquery.ui.datepicker-bs.js index 30ab826b0f0..59d2c0cc44f 100644 --- a/ui/i18n/jquery.ui.datepicker-bs.js +++ b/ui/i18n/jquery.ui.datepicker-bs.js @@ -1,11 +1,8 @@ /* Bosnian i18n for the jQuery UI date picker plugin. */ /* Written by Kenan Konjo. */ -jQuery(function($){ - $.datepicker.regional['bs'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', +(function($) { + $.ui.datepicker.regional['bs'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januar','Februar','Mart','April','Maj','Juni', 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'], - weekHeader: 'Wk', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['bs']); -}); \ No newline at end of file + prevText: '<', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Danas', currentStatus: '', + todayText: 'Danas', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Zatvori', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['bs']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-ca.js b/ui/i18n/jquery.ui.datepicker-ca.js index b128e699efd..4b164187229 100644 --- a/ui/i18n/jquery.ui.datepicker-ca.js +++ b/ui/i18n/jquery.ui.datepicker-ca.js @@ -1,11 +1,8 @@ /* Inicialització en català per a l'extenció 'calendar' per jQuery. */ /* Writers: (joan.leon@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ca'] = { - closeText: 'Tancar', - prevText: '<Ant', - nextText: 'Seg>', - currentText: 'Avui', +(function($) { + $.ui.datepicker.regional['ca'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ca']); -}); \ No newline at end of file + prevText: '<Ant', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Seg>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Avui', currentStatus: '', + todayText: 'Avui', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Tancar', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Sm', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['ca']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-cs.js b/ui/i18n/jquery.ui.datepicker-cs.js index c3c07ea672e..fd68ddd719d 100644 --- a/ui/i18n/jquery.ui.datepicker-cs.js +++ b/ui/i18n/jquery.ui.datepicker-cs.js @@ -1,11 +1,8 @@ /* Czech initialisation for the jQuery UI date picker plugin. */ /* Written by Tomas Muller (tomas@tomas-muller.net). */ -jQuery(function($){ - $.datepicker.regional['cs'] = { - closeText: 'Zavřít', - prevText: '<Dříve', - nextText: 'PozdÄ›ji>', - currentText: 'Nyní', +(function($) { + $.ui.datepicker.regional['cs'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['leden','únor','bÅ™ezen','duben','kvÄ›ten','Äerven', 'Äervenec','srpen','září','říjen','listopad','prosinec'], monthNamesShort: ['led','úno','bÅ™e','dub','kvÄ›','Äer', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['nedÄ›le', 'pondÄ›lí', 'úterý', 'stÅ™eda', 'Ätvrtek', 'pátek', 'sobota'], dayNamesShort: ['ne', 'po', 'út', 'st', 'Ät', 'pá', 'so'], dayNamesMin: ['ne','po','út','st','Ät','pá','so'], - weekHeader: 'Týd', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['cs']); -}); + prevText: '<Dříve', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'PozdÄ›ji>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Nyní', currentStatus: '', + todayText: 'Nyní', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Zavřít', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Týd', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['cs']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-da.js b/ui/i18n/jquery.ui.datepicker-da.js index 4a99a5833b3..1d4bba44787 100644 --- a/ui/i18n/jquery.ui.datepicker-da.js +++ b/ui/i18n/jquery.ui.datepicker-da.js @@ -1,11 +1,8 @@ /* Danish initialisation for the jQuery UI date picker plugin. */ /* Written by Jan Christensen ( deletestuff@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['da'] = { - closeText: 'Luk', - prevText: '<Forrige', - nextText: 'Næste>', - currentText: 'Idag', +(function($) { + $.ui.datepicker.regional['da'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januar','Februar','Marts','April','Maj','Juni', 'Juli','August','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - weekHeader: 'Uge', - dateFormat: 'dd-mm-yy', + dateFormat: 'dd-mm-yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['da']); -}); + prevText: '<Forrige', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Næste>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Idag', currentStatus: '', + todayText: 'Idag', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Luk', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Uge', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['da']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-de.js b/ui/i18n/jquery.ui.datepicker-de.js index ac2d516aa93..34526a7fb1f 100644 --- a/ui/i18n/jquery.ui.datepicker-de.js +++ b/ui/i18n/jquery.ui.datepicker-de.js @@ -1,11 +1,8 @@ /* German initialisation for the jQuery UI date picker plugin. */ /* Written by Milian Wolff (mail@milianw.de). */ -jQuery(function($){ - $.datepicker.regional['de'] = { - closeText: 'schließen', - prevText: '<zurück', - nextText: 'Vor>', - currentText: 'heute', +(function($) { + $.ui.datepicker.regional['de'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januar','Februar','März','April','Mai','Juni', 'Juli','August','September','Oktober','November','Dezember'], monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], - weekHeader: 'Wo', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['de']); -}); + prevText: '<zurück', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Vor>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'heute', currentStatus: '', + todayText: 'heute', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'schließen', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wo', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['de']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-el.js b/ui/i18n/jquery.ui.datepicker-el.js index 9542769d9a5..34ca3c596c8 100644 --- a/ui/i18n/jquery.ui.datepicker-el.js +++ b/ui/i18n/jquery.ui.datepicker-el.js @@ -1,11 +1,8 @@ /* Greek (el) initialisation for the jQuery UI date picker plugin. */ /* Written by Alex Cicovic (http://www.alexcicovic.com) */ -jQuery(function($){ - $.datepicker.regional['el'] = { - closeText: 'Κλείσιμο', - prevText: 'ΠÏοηγοÏμενος', - nextText: 'Επόμενος', - currentText: 'ΤÏέχων Μήνας', +(function($) { + $.ui.datepicker.regional['el'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['ΙανουάÏιος','ΦεβÏουάÏιος','ΜάÏτιος','ΑπÏίλιος','Μάιος','ΙοÏνιος', 'ΙοÏλιος','ΑÏγουστος','ΣεπτέμβÏιος','ΟκτώβÏιος','ÎοέμβÏιος','ΔεκέμβÏιος'], monthNamesShort: ['Ιαν','Φεβ','ΜαÏ','ΑπÏ','Μαι','Ιουν', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['ΚυÏιακή','ΔευτέÏα','ΤÏίτη','ΤετάÏτη','Πέμπτη','ΠαÏασκευή','Σάββατο'], dayNamesShort: ['ΚυÏ','Δευ','ΤÏι','Τετ','Πεμ','ΠαÏ','Σαβ'], dayNamesMin: ['Κυ','Δε','ΤÏ','Τε','Πε','Πα','Σα'], - weekHeader: 'Εβδ', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['el']); -}); \ No newline at end of file + prevText: 'ΠÏοηγοÏμενος', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Επόμενος', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'ΤÏέχων Μήνας', currentStatus: '', + todayText: 'ΤÏέχων Μήνας', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Κλείσιμο', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Εβδ', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['el']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-en-GB.js b/ui/i18n/jquery.ui.datepicker-en-GB.js index aac7b6195c4..802bdd855be 100644 --- a/ui/i18n/jquery.ui.datepicker-en-GB.js +++ b/ui/i18n/jquery.ui.datepicker-en-GB.js @@ -1,11 +1,8 @@ /* English/UK initialisation for the jQuery UI date picker plugin. */ /* Written by Stuart. */ -jQuery(function($){ - $.datepicker.regional['en-GB'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', +(function($) { + $.ui.datepicker.regional['en-GB'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-GB']); -}); + prevText: '<Prev', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Next>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Current', currentStatus: '', + todayText: 'Today', todayStatus: '', + clearText: 'Clear', clearStatus: '', + closeText: 'Done', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['en-GB']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-eo.js b/ui/i18n/jquery.ui.datepicker-eo.js index ba5715687b9..b7a7f07a284 100644 --- a/ui/i18n/jquery.ui.datepicker-eo.js +++ b/ui/i18n/jquery.ui.datepicker-eo.js @@ -1,11 +1,8 @@ /* Esperanto initialisation for the jQuery UI date picker plugin. */ /* Written by Olivier M. (olivierweb@ifrance.com). */ -jQuery(function($){ - $.datepicker.regional['eo'] = { - closeText: 'Fermi', - prevText: '<Anta', - nextText: 'Sekv>', - currentText: 'Nuna', +(function($) { + $.ui.datepicker.regional['eo'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', 'Julio','AÅ­gusto','Septembro','Oktobro','Novembro','Decembro'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ä´aÅ­do','Vendredo','Sabato'], dayNamesShort: ['Dim','Lun','Mar','Mer','Ä´aÅ­','Ven','Sab'], dayNamesMin: ['Di','Lu','Ma','Me','Ä´a','Ve','Sa'], - weekHeader: 'Sb', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['eo']); -}); + prevText: '<Anta', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Sekv>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Nuna', currentStatus: '', + todayText: 'Nuna', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Fermi', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Sb', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['eo']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-es.js b/ui/i18n/jquery.ui.datepicker-es.js index a02133de3ff..2df24105198 100644 --- a/ui/i18n/jquery.ui.datepicker-es.js +++ b/ui/i18n/jquery.ui.datepicker-es.js @@ -1,11 +1,8 @@ /* Inicialización en español para la extensión 'UI date picker' para jQuery. */ /* Traducido por Vester (xvester@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['es'] = { - closeText: 'Cerrar', - prevText: '<Ant', - nextText: 'Sig>', - currentText: 'Hoy', +(function($) { + $.ui.datepicker.regional['es'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['es']); -}); \ No newline at end of file + prevText: '<Ant', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Sig>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Hoy', currentStatus: '', + todayText: 'Hoy', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Cerrar', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Sm', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['es']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-et.js b/ui/i18n/jquery.ui.datepicker-et.js index f97311f31a5..34139f107e8 100644 --- a/ui/i18n/jquery.ui.datepicker-et.js +++ b/ui/i18n/jquery.ui.datepicker-et.js @@ -1,11 +1,8 @@ /* Estonian initialisation for the jQuery UI date picker plugin. */ /* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ -jQuery(function($){ - $.datepicker.regional['et'] = { - closeText: 'Sulge', - prevText: 'Eelnev', - nextText: 'Järgnev', - currentText: 'Täna', +(function($) { + $.ui.datepicker.regional['et'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', 'Juuli','August','September','Oktoober','November','Detsember'], monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], dayNamesMin: ['P','E','T','K','N','R','L'], - weekHeader: 'Sm', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['et']); -}); \ No newline at end of file + prevText: 'Eelnev', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Järgnev', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Täna', currentStatus: '', + todayText: 'Täna', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Sulge', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Sm', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['et']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-eu.js b/ui/i18n/jquery.ui.datepicker-eu.js index 9ba6ee22e34..d29af424a45 100644 --- a/ui/i18n/jquery.ui.datepicker-eu.js +++ b/ui/i18n/jquery.ui.datepicker-eu.js @@ -1,11 +1,8 @@ /* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ /* Karrikas-ek itzulia (karrikas@karrikas.com) */ -jQuery(function($){ - $.datepicker.regional['eu'] = { - closeText: 'Egina', - prevText: '<Aur', - nextText: 'Hur>', - currentText: 'Gaur', +(function($) { + $.ui.datepicker.regional['eu'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina', 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'], monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'], dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'], dayNamesMin: ['Ig','As','As','As','Os','Os','La'], - weekHeader: 'Wk', - dateFormat: 'yy/mm/dd', + dateFormat: 'yyyy/mm/dd', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['eu']); -}); \ No newline at end of file + prevText: '<Aur', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Hur>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Gaur', currentStatus: '', + todayText: 'Gaur', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Egina', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['eu']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-fa.js b/ui/i18n/jquery.ui.datepicker-fa.js index adb3709feda..7cc3462382f 100644 --- a/ui/i18n/jquery.ui.datepicker-fa.js +++ b/ui/i18n/jquery.ui.datepicker-fa.js @@ -1,23 +1,30 @@ /* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ /* Javad Mowlanezhad -- jmowla@gmail.com */ /* Jalali calendar should supported soon! (Its implemented but I have to test it) */ -jQuery(function($) { - $.datepicker.regional['fa'] = { - closeText: 'بستن', - prevText: '<قبلي', - nextText: 'بعدي>', - currentText: 'امروز', +(function($) { + $.ui.datepicker.regional['fa'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['ÙØ±ÙˆØ±Ø¯ÙŠÙ†','ارديبهشت','خرداد','تير','مرداد','شهريور', 'مهر','آبان','آذر','دي','بهمن','اسÙند'], monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'], dayNamesShort: ['ÙŠ','د','س','Ú†','Ù¾','ج', 'Ø´'], dayNamesMin: ['ÙŠ','د','س','Ú†','Ù¾','ج', 'Ø´'], - weekHeader: 'Ù‡Ù', - dateFormat: 'yy/mm/dd', + dateFormat: 'yyyy/mm/dd', firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fa']); -}); \ No newline at end of file + prevText: '<قبلي', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'بعدي>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'امروز', currentStatus: '', + todayText: 'امروز', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'بستن', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Ù‡Ù', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: true + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['fa']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-fi.js b/ui/i18n/jquery.ui.datepicker-fi.js index e1f25fd84ca..0a055a2140b 100644 --- a/ui/i18n/jquery.ui.datepicker-fi.js +++ b/ui/i18n/jquery.ui.datepicker-fi.js @@ -1,11 +1,8 @@ /* Finnish initialisation for the jQuery UI date picker plugin. */ /* Written by Harri Kilpi� (harrikilpio@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['fi'] = { - closeText: 'Sulje', - prevText: '«Edellinen', - nextText: 'Seuraava»', - currentText: 'Tänään', +(function($) { + $.ui.datepicker.regional['fi'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', @@ -13,11 +10,21 @@ jQuery(function($){ dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], - weekHeader: 'Vk', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fi']); -}); + prevText: '«Edellinen', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Seuraava»', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Tänään', currentStatus: '', + todayText: 'Tänään', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Sulje', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Vk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['fi']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-fo.js b/ui/i18n/jquery.ui.datepicker-fo.js index c14362216eb..9c651f91b6f 100644 --- a/ui/i18n/jquery.ui.datepicker-fo.js +++ b/ui/i18n/jquery.ui.datepicker-fo.js @@ -1,11 +1,8 @@ /* Faroese initialisation for the jQuery UI date picker plugin */ /* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ -jQuery(function($){ - $.datepicker.regional['fo'] = { - closeText: 'Lat aftur', - prevText: '<Fyrra', - nextText: 'Næsta>', - currentText: 'à dag', +(function($) { + $.ui.datepicker.regional['fo'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', 'Juli','August','September','Oktober','November','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], - weekHeader: 'Vk', - dateFormat: 'dd-mm-yy', + dateFormat: 'dd-mm-yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fo']); -}); + prevText: '<Fyrra', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Næsta>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'à dag', currentStatus: '', + todayText: 'à dag', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Lat aftur', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Vk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['fo']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-fr-CH.js b/ui/i18n/jquery.ui.datepicker-fr-CH.js index dafef16ffe3..5e55ba6cf04 100644 --- a/ui/i18n/jquery.ui.datepicker-fr-CH.js +++ b/ui/i18n/jquery.ui.datepicker-fr-CH.js @@ -1,23 +1,30 @@ -/* Swiss-French initialisation for the jQuery UI date picker plugin. */ +/* Swiss-French initialisation for the jQuery UI date picker plugin. */ /* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ -jQuery(function($){ - $.datepicker.regional['fr-CH'] = { - closeText: 'Fermer', - prevText: '<Préc', - nextText: 'Suiv>', - currentText: 'Courant', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', - 'Jul','Aoû','Sep','Oct','Nov','Déc'], +(function($) { + $.ui.datepicker.regional['fr-CH'] = { + renderer: $.ui.datepicker.defaultRenderer, + monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', + 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], + monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', + 'Jul','Aoû','Sep','Oct','Nov','Déc'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fr-CH']); -}); \ No newline at end of file + prevText: '<Préc', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Suiv>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Courant', currentStatus: '', + todayText: 'Aujourd\'hui', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Fermer', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Sm', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['fr-CH']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-fr.js b/ui/i18n/jquery.ui.datepicker-fr.js index 134bda65dea..554e1326780 100644 --- a/ui/i18n/jquery.ui.datepicker-fr.js +++ b/ui/i18n/jquery.ui.datepicker-fr.js @@ -1,11 +1,8 @@ /* French initialisation for the jQuery UI date picker plugin. */ -/* Written by Keith Wood (kbwood{at}iinet.com.au) and Stéphane Nahmani (sholby@sholby.net). */ -jQuery(function($){ - $.datepicker.regional['fr'] = { - closeText: 'Fermer', - prevText: '<Préc', - nextText: 'Suiv>', - currentText: 'Courant', +/* Written by Stéphane Nahmani (sholby@sholby.net). */ +(function($) { + $.ui.datepicker.regional['fr'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fr']); -}); \ No newline at end of file + prevText: '<Préc', prevStatus: 'Voir le mois précédent', + prevJumpText: '<<', prevJumpStatus: 'Voir l\'année précédent', + nextText: 'Suiv>', nextStatus: 'Voir le mois suivant', + nextJumpText: '>>', nextJumpStatus: 'Voir l\'année suivant', + currentText: 'Courant', currentStatus: 'Voir le mois courant', + todayText: 'Aujourd\'hui', todayStatus: 'Voir aujourd\'hui', + clearText: 'Effacer', clearStatus: 'Effacer la date sélectionnée', + closeText: 'Fermer', closeStatus: 'Fermer sans modifier', + yearStatus: 'Voir une autre année', monthStatus: 'Voir un autre mois', + weekText: 'Sm', weekStatus: 'Semaine de l\'année', + dayStatus: '\'Choisir\' le DD d MM', + defaultStatus: 'Choisir la date', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['fr']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-he.js b/ui/i18n/jquery.ui.datepicker-he.js index 3b3dc387f2f..0d74f3da2e6 100644 --- a/ui/i18n/jquery.ui.datepicker-he.js +++ b/ui/i18n/jquery.ui.datepicker-he.js @@ -1,11 +1,8 @@ -/* Hebrew initialisation for the UI Datepicker extension. */ +/* Hebrew initialisation for the jQuery UI date picker plugin. */ /* Written by Amir Hardon (ahardon at gmail dot com). */ -jQuery(function($){ - $.datepicker.regional['he'] = { - closeText: 'סגור', - prevText: '<הקוד×', - nextText: 'הב×>', - currentText: 'היו×', +(function($) { + $.ui.datepicker.regional['he'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['ינו×ר','פברו×ר','מרץ','×פריל','מ××™','יוני', 'יולי','×וגוסט','ספטמבר','×וקטובר','נובמבר','דצמבר'], monthNamesShort: ['1','2','3','4','5','6', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['ר×שון','שני','שלישי','רביעי','חמישי','שישי','שבת'], dayNamesShort: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'], dayNamesMin: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['he']); -}); + prevText: '<הקוד×', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'הב×>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'היו×', currentStatus: '', + todayText: 'היו×', todayStatus: '', + clearText: '× ×§×”', clearStatus: '', + closeText: 'סגור', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD, M d', + defaultStatus: '', + isRTL: true + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['he']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-hr.js b/ui/i18n/jquery.ui.datepicker-hr.js index 0285c1aa9bd..5e62f97f132 100644 --- a/ui/i18n/jquery.ui.datepicker-hr.js +++ b/ui/i18n/jquery.ui.datepicker-hr.js @@ -1,11 +1,8 @@ /* Croatian i18n for the jQuery UI date picker plugin. */ /* Written by Vjekoslav Nesek. */ -jQuery(function($){ - $.datepicker.regional['hr'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', +(function($) { + $.ui.datepicker.regional['hr'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['SijeÄanj','VeljaÄa','Ožujak','Travanj','Svibanj','Lipanj', 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'], - weekHeader: 'Tje', - dateFormat: 'dd.mm.yy.', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hr']); -}); \ No newline at end of file + prevText: '<', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Danas', currentStatus: '', + todayText: 'Danas', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Zatvori', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Tje', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['hr']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-hu.js b/ui/i18n/jquery.ui.datepicker-hu.js index 249e7b0ef4f..3220b2b99a1 100644 --- a/ui/i18n/jquery.ui.datepicker-hu.js +++ b/ui/i18n/jquery.ui.datepicker-hu.js @@ -1,11 +1,8 @@ /* Hungarian initialisation for the jQuery UI date picker plugin. */ /* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ -jQuery(function($){ - $.datepicker.regional['hu'] = { - closeText: 'bezárás', - prevText: '« vissza', - nextText: 'elÅ‘re »', - currentText: 'ma', +(function($) { + $.ui.datepicker.regional['hu'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Január', 'Február', 'Március', 'Ãprilis', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Már', 'Ãpr', 'Máj', 'Jún', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], - weekHeader: 'Hé', - dateFormat: 'yy-mm-dd', + dateFormat: 'yyyy-mm-dd', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hu']); -}); + prevText: '« vissza', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'elÅ‘re »', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'ma', currentStatus: '', + todayText: 'ma', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'bezárás', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Hé', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['hu']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-hy.js b/ui/i18n/jquery.ui.datepicker-hy.js index c6cc1946c47..c61199e1608 100644 --- a/ui/i18n/jquery.ui.datepicker-hy.js +++ b/ui/i18n/jquery.ui.datepicker-hy.js @@ -1,11 +1,8 @@ /* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ -jQuery(function($){ - $.datepicker.regional['hy'] = { - closeText: 'Õ“Õ¡Õ¯Õ¥Õ¬', - prevText: '<Õ†Õ¡Õ­.', - nextText: 'Õ€Õ¡Õ».>', - currentText: 'Ô±ÕµÕ½Ö…Ö€', +(function($) { + $.ui.datepicker.regional['hy'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Õ€Õ¸Ö‚Õ¶Õ¾Õ¡Ö€','Õ“Õ¥Õ¿Ö€Õ¾Õ¡Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€Õ«Õ¬','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½', 'Õ€Õ¸Ö‚Õ¬Õ«Õ½','Õ•Õ£Õ¸Õ½Õ¿Õ¸Õ½','ÕÕ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ€Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ†Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€','Ô´Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'], monthNamesShort: ['Õ€Õ¸Ö‚Õ¶Õ¾','Õ“Õ¥Õ¿Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Õ¯Õ«Ö€Õ¡Õ¯Õ«','Õ¥Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«','Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«','Õ¸Ö‚Ö€Õ¢Õ¡Õ©','Õ·Õ¡Õ¢Õ¡Õ©'], dayNamesShort: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'], dayNamesMin: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'], - weekHeader: 'Õ‡Ô²Õ', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hy']); -}); \ No newline at end of file + prevText: '<Õ†Õ¡Õ­.', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Õ€Õ¡Õ».>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Ô±ÕµÕ½Ö…Ö€', currentStatus: '', + todayText: 'Ô±ÕµÕ½Ö…Ö€', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Õ“Õ¡Õ¯Õ¥Õ¬', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Õ‡Ô²Õ', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['hy']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-id.js b/ui/i18n/jquery.ui.datepicker-id.js index c626fbb7b83..75ef2b6d899 100644 --- a/ui/i18n/jquery.ui.datepicker-id.js +++ b/ui/i18n/jquery.ui.datepicker-id.js @@ -1,11 +1,8 @@ -/* Indonesian initialisation for the jQuery UI date picker plugin. */ +/* Indonesian initialisation for the jQuery UI date picker plugin. */ /* Written by Deden Fathurahman (dedenf@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['id'] = { - closeText: 'Tutup', - prevText: '<mundur', - nextText: 'maju>', - currentText: 'hari ini', +(function($) { + $.ui.datepicker.regional['id'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januari','Februari','Maret','April','Mei','Juni', 'Juli','Agustus','September','Oktober','Nopember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], - weekHeader: 'Mg', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['id']); -}); \ No newline at end of file + prevText: '<mundur', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'maju>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'hari ini', currentStatus: '', + todayText: 'hari ini', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Tutup', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Mg', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['id']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-is.js b/ui/i18n/jquery.ui.datepicker-is.js index c53235a49e1..15a9bbeeacd 100644 --- a/ui/i18n/jquery.ui.datepicker-is.js +++ b/ui/i18n/jquery.ui.datepicker-is.js @@ -1,11 +1,8 @@ -/* Icelandic initialisation for the jQuery UI date picker plugin. */ +/* Icelandic initialisation for the jQuery UI date picker plugin. */ /* Written by Haukur H. Thorsson (haukur@eskill.is). */ -jQuery(function($){ - $.datepicker.regional['is'] = { - closeText: 'Loka', - prevText: '< Fyrri', - nextText: 'Næsti >', - currentText: 'Í dag', +(function($) { + $.ui.datepicker.regional['is'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', 'Júlí','Ágúst','September','Október','Nóvember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], - weekHeader: 'Vika', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['is']); -}); \ No newline at end of file + prevText: '< Fyrri', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Næsti >', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Í dag', currentStatus: '', + todayText: 'Í dag', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Loka', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Vika', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['is']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-it.js b/ui/i18n/jquery.ui.datepicker-it.js index 59da2df671e..77fdfe41877 100644 --- a/ui/i18n/jquery.ui.datepicker-it.js +++ b/ui/i18n/jquery.ui.datepicker-it.js @@ -1,11 +1,8 @@ -/* Italian initialisation for the jQuery UI date picker plugin. */ +/* Italian initialisation for the jQuery UI date picker plugin. */ /* Written by Antonello Pasella (antonello.pasella@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['it'] = { - closeText: 'Chiudi', - prevText: '<Prec', - nextText: 'Succ>', - currentText: 'Oggi', +(function($) { + $.ui.datepicker.regional['it'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['it']); -}); + prevText: '<Prec', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Succ>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Oggi', currentStatus: '', + todayText: 'Oggi', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Chiudi', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Sm', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['it']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-ja.js b/ui/i18n/jquery.ui.datepicker-ja.js index 79cd827c766..88233c02c62 100644 --- a/ui/i18n/jquery.ui.datepicker-ja.js +++ b/ui/i18n/jquery.ui.datepicker-ja.js @@ -1,11 +1,10 @@ /* Japanese initialisation for the jQuery UI date picker plugin. */ /* Written by Kentaro SATO (kentaro@ranvis.com). */ -jQuery(function($){ - $.datepicker.regional['ja'] = { - closeText: 'é–‰ã˜ã‚‹', - prevText: '<å‰', - nextText: '次>', - currentText: '今日', +(function($) { + $.ui.datepicker.regional['ja'] = { + renderer: $.extend({}, $.ui.datepicker.defaultRenderer, + {month: $.ui.datepicker.defaultRenderer.month. + replace(/monthHeader:M yyyy/, 'monthHeader:yyyyå¹´ M')}), monthNames: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], monthNamesShort: ['1月','2月','3月','4月','5月','6月', @@ -13,11 +12,21 @@ jQuery(function($){ dayNames: ['日曜日','月曜日','ç«æ›œæ—¥','水曜日','木曜日','金曜日','土曜日'], dayNamesShort: ['æ—¥','月','ç«','æ°´','木','金','土'], dayNamesMin: ['æ—¥','月','ç«','æ°´','木','金','土'], - weekHeader: '週', - dateFormat: 'yy/mm/dd', + dateFormat: 'yyyy/mm/dd', firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['ja']); -}); \ No newline at end of file + prevText: '<å‰', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '次>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: '今日', currentStatus: '', + todayText: '今日', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'é–‰ã˜ã‚‹', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: '週', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['ja']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-ko.js b/ui/i18n/jquery.ui.datepicker-ko.js index 5b3531652d9..cb9a951d837 100644 --- a/ui/i18n/jquery.ui.datepicker-ko.js +++ b/ui/i18n/jquery.ui.datepicker-ko.js @@ -1,11 +1,10 @@ /* Korean initialisation for the jQuery calendar extension. */ /* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ko'] = { - closeText: '닫기', - prevText: 'ì´ì „달', - nextText: '다ìŒë‹¬', - currentText: '오늘', +(function($) { + $.ui.datepicker.regional['ko'] = { + renderer: $.extend({}, $.ui.datepicker.defaultRenderer, + {month: $.ui.datepicker.defaultRenderer.month. + replace(/monthHeader:M yyyy/, 'monthHeader:M yyyyë…„')}), monthNames: ['1ì›”(JAN)','2ì›”(FEB)','3ì›”(MAR)','4ì›”(APR)','5ì›”(MAY)','6ì›”(JUN)', '7ì›”(JUL)','8ì›”(AUG)','9ì›”(SEP)','10ì›”(OCT)','11ì›”(NOV)','12ì›”(DEC)'], monthNamesShort: ['1ì›”(JAN)','2ì›”(FEB)','3ì›”(MAR)','4ì›”(APR)','5ì›”(MAY)','6ì›”(JUN)', @@ -13,11 +12,21 @@ jQuery(function($){ dayNames: ['ì¼','ì›”','í™”','수','목','금','토'], dayNamesShort: ['ì¼','ì›”','í™”','수','목','금','토'], dayNamesMin: ['ì¼','ì›”','í™”','수','목','금','토'], - weekHeader: 'Wk', - dateFormat: 'yy-mm-dd', + dateFormat: 'yyyy-mm-dd', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: 'ë…„'}; - $.datepicker.setDefaults($.datepicker.regional['ko']); -}); \ No newline at end of file + prevText: 'ì´ì „달', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '다ìŒë‹¬', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: '오늘', currentStatus: '', + todayText: '오늘', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: '닫기', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['ko']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-lt.js b/ui/i18n/jquery.ui.datepicker-lt.js index 67d5119ca70..87a75511f4b 100644 --- a/ui/i18n/jquery.ui.datepicker-lt.js +++ b/ui/i18n/jquery.ui.datepicker-lt.js @@ -1,11 +1,8 @@ /* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ -jQuery(function($){ - $.datepicker.regional['lt'] = { - closeText: 'Uždaryti', - prevText: '<Atgal', - nextText: 'Pirmyn>', - currentText: 'Å iandien', +(function($) { + $.ui.datepicker.regional['lt'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', 'Liepa','RugpjÅ«tis','RugsÄ—jis','Spalis','Lapkritis','Gruodis'], monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['sekmadienis','pirmadienis','antradienis','treÄiadienis','ketvirtadienis','penktadienis','Å¡eÅ¡tadienis'], dayNamesShort: ['sek','pir','ant','tre','ket','pen','Å¡eÅ¡'], dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Å e'], - weekHeader: 'Wk', - dateFormat: 'yy-mm-dd', + dateFormat: 'yyyy-mm-dd', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lt']); -}); \ No newline at end of file + prevText: '<Atgal', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Pirmyn>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Å iandien', currentStatus: '', + todayText: 'Å iandien', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Uždaryti', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['lt']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-lv.js b/ui/i18n/jquery.ui.datepicker-lv.js index 003934e7212..dec6c365d53 100644 --- a/ui/i18n/jquery.ui.datepicker-lv.js +++ b/ui/i18n/jquery.ui.datepicker-lv.js @@ -1,11 +1,8 @@ /* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ -jQuery(function($){ - $.datepicker.regional['lv'] = { - closeText: 'AizvÄ“rt', - prevText: 'Iepr', - nextText: 'NÄka', - currentText: 'Å odien', +(function($) { + $.ui.datepicker.regional['lv'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['JanvÄris','FebruÄris','Marts','AprÄ«lis','Maijs','JÅ«nijs', 'JÅ«lijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','JÅ«n', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['svÄ“tdiena','pirmdiena','otrdiena','treÅ¡diena','ceturtdiena','piektdiena','sestdiena'], dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], - weekHeader: 'Nav', - dateFormat: 'dd-mm-yy', + dateFormat: 'dd-mm-yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lv']); -}); \ No newline at end of file + prevText: 'Iepr', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'NÄka', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Å odien', currentStatus: '', + todayText: 'Å odien', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'AizvÄ“rt', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Nav', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['lv']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-ms.js b/ui/i18n/jquery.ui.datepicker-ms.js index e953ac04f19..03f028ee9ce 100644 --- a/ui/i18n/jquery.ui.datepicker-ms.js +++ b/ui/i18n/jquery.ui.datepicker-ms.js @@ -1,11 +1,8 @@ /* Malaysian initialisation for the jQuery UI date picker plugin. */ /* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ -jQuery(function($){ - $.datepicker.regional['ms'] = { - closeText: 'Tutup', - prevText: '<Sebelum', - nextText: 'Selepas>', - currentText: 'hari ini', +(function($) { + $.ui.datepicker.regional['ms'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januari','Februari','Mac','April','Mei','Jun', 'Julai','Ogos','September','Oktober','November','Disember'], monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], - weekHeader: 'Mg', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ms']); -}); \ No newline at end of file + prevText: '<Sebelum', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Selepas>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'hari ini', currentStatus: '', + todayText: 'hari ini', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Tutup', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Mg', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['ms']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-nl.js b/ui/i18n/jquery.ui.datepicker-nl.js index 663d6bb26bd..5695dad9983 100644 --- a/ui/i18n/jquery.ui.datepicker-nl.js +++ b/ui/i18n/jquery.ui.datepicker-nl.js @@ -1,11 +1,8 @@ /* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Mathias Bynens */ -jQuery(function($){ - $.datepicker.regional.nl = { - closeText: 'Sluiten', - prevText: 'â†', - nextText: '→', - currentText: 'Vandaag', +(function($) { + $.ui.datepicker.regional.nl = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional.nl); -}); \ No newline at end of file + prevText: 'â†', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '→', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Vandaag', currentStatus: '', + todayText: 'Vandaag', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Sluiten', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional.nl); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-no.js b/ui/i18n/jquery.ui.datepicker-no.js index 12b2356bf34..7da8e76cebd 100644 --- a/ui/i18n/jquery.ui.datepicker-no.js +++ b/ui/i18n/jquery.ui.datepicker-no.js @@ -1,11 +1,8 @@ /* Norwegian initialisation for the jQuery UI date picker plugin. */ /* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['no'] = { - closeText: 'Lukk', - prevText: '«Forrige', - nextText: 'Neste»', - currentText: 'I dag', +(function($) { + $.ui.datepicker.regional['no'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januar','Februar','Mars','April','Mai','Juni', 'Juli','August','September','Oktober','November','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - weekHeader: 'Uke', - dateFormat: 'yy-mm-dd', + dateFormat: 'yyyy-mm-dd', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['no']); -}); + prevText: '«Forrige', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Neste»', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'I dag', currentStatus: '', + todayText: 'I dag', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Lukk', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Uke', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['no']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-pl.js b/ui/i18n/jquery.ui.datepicker-pl.js index 2d2d4d7659f..95d75da3355 100644 --- a/ui/i18n/jquery.ui.datepicker-pl.js +++ b/ui/i18n/jquery.ui.datepicker-pl.js @@ -1,11 +1,8 @@ /* Polish initialisation for the jQuery UI date picker plugin. */ /* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pl'] = { - closeText: 'Zamknij', - prevText: '<Poprzedni', - nextText: 'NastÄ™pny>', - currentText: 'DziÅ›', +(function($) { + $.ui.datepicker.regional['pl'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['StyczeÅ„','Luty','Marzec','KwiecieÅ„','Maj','Czerwiec', 'Lipiec','SierpieÅ„','WrzesieÅ„','Październik','Listopad','GrudzieÅ„'], monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Niedziela','Poniedzialek','Wtorek','Åšroda','Czwartek','PiÄ…tek','Sobota'], dayNamesShort: ['Nie','Pn','Wt','Åšr','Czw','Pt','So'], dayNamesMin: ['N','Pn','Wt','Åšr','Cz','Pt','So'], - weekHeader: 'Tydz', - dateFormat: 'yy-mm-dd', + dateFormat: 'yyyy-mm-dd', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pl']); -}); + prevText: '<Poprzedni', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'NastÄ™pny>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'DziÅ›', currentStatus: '', + todayText: 'DziÅ›', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Zamknij', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Tydz', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['pl']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-pt-BR.js b/ui/i18n/jquery.ui.datepicker-pt-BR.js index 38818637dbe..1c3189c173a 100644 --- a/ui/i18n/jquery.ui.datepicker-pt-BR.js +++ b/ui/i18n/jquery.ui.datepicker-pt-BR.js @@ -1,11 +1,8 @@ /* Brazilian initialisation for the jQuery UI date picker plugin. */ /* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pt-BR'] = { - closeText: 'Fechar', - prevText: '<Anterior', - nextText: 'Próximo>', - currentText: 'Hoje', +(function($) { + $.ui.datepicker.regional['pt-BR'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sabado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pt-BR']); -}); \ No newline at end of file + prevText: '<Anterior', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Próximo>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Hoje', currentStatus: '', + todayText: 'Hoje', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Fechar', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Sm', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['pt-BR']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-ro.js b/ui/i18n/jquery.ui.datepicker-ro.js index 4fe95aeac16..f5484cc5f30 100644 --- a/ui/i18n/jquery.ui.datepicker-ro.js +++ b/ui/i18n/jquery.ui.datepicker-ro.js @@ -1,14 +1,8 @@ -/* Romanian initialisation for the jQuery UI date picker plugin. - * - * Written by Edmond L. (ll_edmond@walla.com) - * and Ionut G. Stan (ionut.g.stan@gmail.com) - */ -jQuery(function($){ - $.datepicker.regional['ro'] = { - closeText: 'ÃŽnchide', - prevText: '« Luna precedentă', - nextText: 'Luna următoare »', - currentText: 'Azi', +/* Romanian initialisation for the jQuery UI date picker plugin. */ +/* Written by Edmond L. (ll_edmond@walla.com) and Ionut G. Stan (ionut.g.stan@gmail.com) */ +(function($) { + $.ui.datepicker.regional['ro'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', @@ -16,11 +10,21 @@ jQuery(function($){ dayNames: ['Duminică', 'Luni', 'MarÅ£i', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], - weekHeader: 'Săpt', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ro']); -}); + prevText: '« Luna precedentă', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Luna următoare »', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Azi', currentStatus: '', + todayText: 'Azi', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'ÃŽnchide', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Săpt', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['ro']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-ru.js b/ui/i18n/jquery.ui.datepicker-ru.js index b8091f9eccd..f89ffabe7cb 100644 --- a/ui/i18n/jquery.ui.datepicker-ru.js +++ b/ui/i18n/jquery.ui.datepicker-ru.js @@ -1,11 +1,8 @@ /* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Andrew Stromnov (stromnov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ru'] = { - closeText: 'Закрыть', - prevText: '<Пред', - nextText: 'След>', - currentText: 'СегоднÑ', +(function($) { + $.ui.datepicker.regional['ru'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Январь','Февраль','Март','Ðпрель','Май','Июнь', 'Июль','ÐвгуÑÑ‚','СентÑбрь','ОктÑбрь','ÐоÑбрь','Декабрь'], monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['воÑкреÑенье','понедельник','вторник','Ñреда','четверг','пÑтница','Ñуббота'], dayNamesShort: ['вÑк','пнд','втр','Ñрд','чтв','птн','Ñбт'], dayNamesMin: ['Ð’Ñ','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'], - weekHeader: 'Ðе', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ru']); -}); \ No newline at end of file + prevText: '<Пред', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'След>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'СегоднÑ', currentStatus: '', + todayText: 'СегоднÑ', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Закрыть', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['ru']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-sk.js b/ui/i18n/jquery.ui.datepicker-sk.js index e8e73e6717b..607ee5ca066 100644 --- a/ui/i18n/jquery.ui.datepicker-sk.js +++ b/ui/i18n/jquery.ui.datepicker-sk.js @@ -1,11 +1,8 @@ /* Slovak initialisation for the jQuery UI date picker plugin. */ /* Written by Vojtech Rinik (vojto@hmm.sk). */ -jQuery(function($){ - $.datepicker.regional['sk'] = { - closeText: 'ZavrieÅ¥', - prevText: '<Predchádzajúci', - nextText: 'Nasledujúci>', - currentText: 'Dnes', +(function($) { + $.ui.datepicker.regional['sk'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', 'Júl','August','September','Október','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Å tvrtok','Piatok','Sobota'], dayNamesShort: ['Ned','Pon','Uto','Str','Å tv','Pia','Sob'], dayNamesMin: ['Ne','Po','Ut','St','Å t','Pia','So'], - weekHeader: 'Ty', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sk']); -}); + prevText: '<Predchádzajúci', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Nasledujúci>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Dnes', currentStatus: '', + todayText: 'Dnes', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'ZavrieÅ¥', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Ty', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['sk']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-sl.js b/ui/i18n/jquery.ui.datepicker-sl.js index 516550192a7..312c14fc725 100644 --- a/ui/i18n/jquery.ui.datepicker-sl.js +++ b/ui/i18n/jquery.ui.datepicker-sl.js @@ -1,12 +1,9 @@ -/* Slovenian initialisation for the jQuery UI date picker plugin. */ +/* Slovenian initialisation for the jQuery UI date picker plugin. */ /* Written by Jaka Jancar (jaka@kubje.org). */ /* c = č, s = š z = ž C = Č S = Š Z = Ž */ -jQuery(function($){ - $.datepicker.regional['sl'] = { - closeText: 'Zapri', - prevText: '<Prejšnji', - nextText: 'Naslednji>', - currentText: 'Trenutni', +(function($) { + $.ui.datepicker.regional['sl'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januar','Februar','Marec','April','Maj','Junij', 'Julij','Avgust','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', @@ -14,11 +11,21 @@ jQuery(function($){ dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], - weekHeader: 'Teden', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sl']); -}); + prevText: '<Prejšnji', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Naslednji>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Trenutni', currentStatus: '', + todayText: 'Trenutni', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Zapri', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Teden', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['sl']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-sq.js b/ui/i18n/jquery.ui.datepicker-sq.js index be84104c096..7c8dc6db6e5 100644 --- a/ui/i18n/jquery.ui.datepicker-sq.js +++ b/ui/i18n/jquery.ui.datepicker-sq.js @@ -1,11 +1,8 @@ /* Albanian initialisation for the jQuery UI date picker plugin. */ /* Written by Flakron Bytyqi (flakron@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['sq'] = { - closeText: 'mbylle', - prevText: '<mbrapa', - nextText: 'Përpara>', - currentText: 'sot', +(function($) { + $.ui.datepicker.regional['sq'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], - weekHeader: 'Ja', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sq']); -}); + prevText: '<mbrapa', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Përpara>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'sot', currentStatus: '', + todayText: 'sot', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'mbylle', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Ja', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['sq']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-sr-SR.js b/ui/i18n/jquery.ui.datepicker-sr-SR.js index 8f8ea5e6307..418d0623c5e 100644 --- a/ui/i18n/jquery.ui.datepicker-sr-SR.js +++ b/ui/i18n/jquery.ui.datepicker-sr-SR.js @@ -1,11 +1,8 @@ /* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr-SR'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', +(function($) { + $.ui.datepicker.regional['sr-SR'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Januar','Februar','Mart','April','Maj','Jun', 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','ÄŒetvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sre','ÄŒet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'], - weekHeader: 'Sed', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sr-SR']); -}); + prevText: '<', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Danas', currentStatus: '', + todayText: 'Danas', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Zatvori', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Sed', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['sr-SR']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-sr.js b/ui/i18n/jquery.ui.datepicker-sr.js index 49c9b4a3036..c7149543d4b 100644 --- a/ui/i18n/jquery.ui.datepicker-sr.js +++ b/ui/i18n/jquery.ui.datepicker-sr.js @@ -1,11 +1,8 @@ /* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr'] = { - closeText: 'Затвори', - prevText: '<', - nextText: '>', - currentText: 'ДанаÑ', +(function($) { + $.ui.datepicker.regional['sr'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Јануар','Фебруар','Март','Ðприл','Мај','Јун', 'Јул','ÐвгуÑÑ‚','Септембар','Октобар','Ðовембар','Децембар'], monthNamesShort: ['Јан','Феб','Мар','Ðпр','Мај','Јун', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Ðедеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], dayNamesShort: ['Ðед','Пон','Уто','Сре','Чет','Пет','Суб'], dayNamesMin: ['Ðе','По','Ут','Ср','Че','Пе','Су'], - weekHeader: 'Сед', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sr']); -}); + prevText: '<', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'ДанаÑ', currentStatus: '', + todayText: 'ДанаÑ', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Затвори', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Сед', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['sr']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-sv.js b/ui/i18n/jquery.ui.datepicker-sv.js index 8236b62b53b..18ac0165b0f 100644 --- a/ui/i18n/jquery.ui.datepicker-sv.js +++ b/ui/i18n/jquery.ui.datepicker-sv.js @@ -1,23 +1,30 @@ /* Swedish initialisation for the jQuery UI date picker plugin. */ /* Written by Anders Ekdahl ( anders@nomadiz.se). */ -jQuery(function($){ - $.datepicker.regional['sv'] = { - closeText: 'Stäng', - prevText: '«Förra', - nextText: 'Nästa»', - currentText: 'Idag', - monthNames: ['Januari','Februari','Mars','April','Maj','Juni', +(function($) { + $.ui.datepicker.regional['sv'] = { + renderer: $.ui.datepicker.defaultRenderer, + monthNames: ['Januari','Februari','Mars','April','Maj','Juni', 'Juli','Augusti','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNamesShort: ['Sön','MÃ¥n','Tis','Ons','Tor','Fre','Lör'], dayNames: ['Söndag','MÃ¥ndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], dayNamesMin: ['Sö','MÃ¥','Ti','On','To','Fr','Lö'], - weekHeader: 'Ve', - dateFormat: 'yy-mm-dd', + dateFormat: 'yyyy-mm-dd', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sv']); -}); + prevText: '«Förra', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Nästa»', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Idag', currentStatus: '', + todayText: 'Idag', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Stäng', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Ve', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['sv']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-ta.js b/ui/i18n/jquery.ui.datepicker-ta.js index 91116d3877c..2c879083d7b 100644 --- a/ui/i18n/jquery.ui.datepicker-ta.js +++ b/ui/i18n/jquery.ui.datepicker-ta.js @@ -1,11 +1,8 @@ /* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by S A Sureshkumar (saskumar@live.com). */ -jQuery(function($){ - $.datepicker.regional['ta'] = { - closeText: 'மூடà¯', - prevText: 'à®®à¯à®©à¯à®©à¯ˆà®¯à®¤à¯', - nextText: 'அடà¯à®¤à¯à®¤à®¤à¯', - currentText: 'இனà¯à®±à¯', +(function($) { + $.ui.datepicker.regional['ta'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['தை','மாசி','பஙà¯à®•à¯à®©à®¿','சிதà¯à®¤à®¿à®°à¯ˆ','வைகாசி','ஆனி', 'ஆடி','ஆவணி','பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿','à®à®ªà¯à®ªà®šà®¿','காரà¯à®¤à¯à®¤à®¿à®•ை','மாரà¯à®•ழி'], monthNamesShort: ['தை','மாசி','பஙà¯','சிதà¯','வைகா','ஆனி', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['ஞாயிறà¯à®±à¯à®•à¯à®•ிழமை','திஙà¯à®•டà¯à®•ிழமை','செவà¯à®µà®¾à®¯à¯à®•à¯à®•ிழமை','பà¯à®¤à®©à¯à®•ிழமை','வியாழகà¯à®•ிழமை','வெளà¯à®³à®¿à®•à¯à®•ிழமை','சனிகà¯à®•ிழமை'], dayNamesShort: ['ஞாயிறà¯','திஙà¯à®•ளà¯','செவà¯à®µà®¾à®¯à¯','பà¯à®¤à®©à¯','வியாழனà¯','வெளà¯à®³à®¿','சனி'], dayNamesMin: ['ஞா','தி','செ','பà¯','வி','வெ','ச'], - weekHeader: 'Ðе', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ta']); -}); + prevText: 'à®®à¯à®©à¯à®©à¯ˆà®¯à®¤à¯', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'அடà¯à®¤à¯à®¤à®¤à¯', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'இனà¯à®±à¯', currentStatus: '', + todayText: 'இனà¯à®±à¯', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'மூடà¯', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['ta']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-th.js b/ui/i18n/jquery.ui.datepicker-th.js index 978500ab11b..554c35d33c2 100644 --- a/ui/i18n/jquery.ui.datepicker-th.js +++ b/ui/i18n/jquery.ui.datepicker-th.js @@ -1,11 +1,8 @@ /* Thai initialisation for the jQuery UI date picker plugin. */ /* Written by pipo (pipo@sixhead.com). */ -jQuery(function($){ - $.datepicker.regional['th'] = { - closeText: 'ปิด', - prevText: '« à¸¢à¹‰à¸­à¸™', - nextText: 'ถัดไป »', - currentText: 'วันนี้', +(function($) { + $.ui.datepicker.regional['th'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['มà¸à¸£à¸²à¸„ม','à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', 'à¸à¸£à¸à¸à¸²à¸„ม','สิงหาคม','à¸à¸±à¸™à¸¢à¸²à¸¢à¸™','ตุลาคม','พฤศจิà¸à¸²à¸¢à¸™','ธันวาคม'], monthNamesShort: ['ม.ค.','à¸.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุà¸à¸£à¹Œ','เสาร์'], dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['th']); -}); \ No newline at end of file + prevText: '« à¸¢à¹‰à¸­à¸™', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'ถัดไป »', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'วันนี้', currentStatus: '', + todayText: 'วันนี้', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'ปิด', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Wk', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['th']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-tr.js b/ui/i18n/jquery.ui.datepicker-tr.js index dedfc7ff99b..8ad473b4ac3 100644 --- a/ui/i18n/jquery.ui.datepicker-tr.js +++ b/ui/i18n/jquery.ui.datepicker-tr.js @@ -1,11 +1,8 @@ /* Turkish initialisation for the jQuery UI date picker plugin. */ /* Written by Izzet Emre Erkan (kara@karalamalar.net). */ -jQuery(function($){ - $.datepicker.regional['tr'] = { - closeText: 'kapat', - prevText: '<geri', - nextText: 'ileri>', - currentText: 'bugün', +(function($) { + $.ui.datepicker.regional['tr'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Ocak','Åžubat','Mart','Nisan','Mayıs','Haziran', 'Temmuz','AÄŸustos','Eylül','Ekim','Kasım','Aralık'], monthNamesShort: ['Oca','Åžub','Mar','Nis','May','Haz', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Pazar','Pazartesi','Salı','ÇarÅŸamba','PerÅŸembe','Cuma','Cumartesi'], dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - weekHeader: 'Hf', - dateFormat: 'dd.mm.yy', + dateFormat: 'dd.mm.yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['tr']); -}); \ No newline at end of file + prevText: '<geri', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'ileri>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'bugün', currentStatus: '', + todayText: 'bugün', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'kapat', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Hf', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['tr']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-uk.js b/ui/i18n/jquery.ui.datepicker-uk.js index 112b40e7f8d..4166016078a 100644 --- a/ui/i18n/jquery.ui.datepicker-uk.js +++ b/ui/i18n/jquery.ui.datepicker-uk.js @@ -1,11 +1,8 @@ /* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['uk'] = { - closeText: 'Закрити', - prevText: '<', - nextText: '>', - currentText: 'Сьогодні', +(function($) { + $.ui.datepicker.regional['uk'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', 'Липень','Серпень','ВереÑень','Жовтень','ЛиÑтопад','Грудень'], monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['неділÑ','понеділок','вівторок','Ñереда','четвер','п’ÑтницÑ','Ñубота'], dayNamesShort: ['нед','пнд','вів','Ñрд','чтв','птн','Ñбт'], dayNamesMin: ['Ðд','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'], - weekHeader: 'Ðе', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['uk']); -}); \ No newline at end of file + prevText: '<', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Сьогодні', currentStatus: '', + todayText: 'Сьогодні', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Закрити', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Ðе', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['uk']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-vi.js b/ui/i18n/jquery.ui.datepicker-vi.js index 9813a59e019..211b78cf61c 100644 --- a/ui/i18n/jquery.ui.datepicker-vi.js +++ b/ui/i18n/jquery.ui.datepicker-vi.js @@ -1,11 +1,8 @@ /* Vietnamese initialisation for the jQuery UI date picker plugin. */ /* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ -jQuery(function($){ - $.datepicker.regional['vi'] = { - closeText: 'Äóng', - prevText: '<Trước', - nextText: 'Tiếp>', - currentText: 'Hôm nay', +(function($) { + $.ui.datepicker.regional['vi'] = { + renderer: $.ui.datepicker.defaultRenderer, monthNames: ['Tháng Má»™t', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mưá»i', 'Tháng Mưá»i Má»™t', 'Tháng Mưá»i Hai'], monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', @@ -13,11 +10,21 @@ jQuery(function($){ dayNames: ['Chá»§ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], - weekHeader: 'Tu', - dateFormat: 'dd/mm/yy', + dateFormat: 'dd/mm/yyyy', firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['vi']); -}); + prevText: '<Trước', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: 'Tiếp>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: 'Hôm nay', currentStatus: '', + todayText: 'Hôm nay', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: 'Äóng', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: 'Tu', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['vi']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-zh-CN.js b/ui/i18n/jquery.ui.datepicker-zh-CN.js index 6c4883f536d..1f86af8a79f 100644 --- a/ui/i18n/jquery.ui.datepicker-zh-CN.js +++ b/ui/i18n/jquery.ui.datepicker-zh-CN.js @@ -1,11 +1,10 @@ /* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Cloudream (cloudream@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-CN'] = { - closeText: '关闭', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', +(function($) { + $.ui.datepicker.regional['zh-CN'] = { + renderer: $.extend({}, $.ui.datepicker.defaultRenderer, + {month: $.ui.datepicker.defaultRenderer.month. + replace(/monthHeader:M yyyy/, 'monthHeader:yyyyå¹´ M')}), monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','乿œˆ','åæœˆ','å一月','å二月'], monthNamesShort: ['一','二','三','å››','五','å…­', @@ -13,11 +12,21 @@ jQuery(function($){ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['æ—¥','一','二','三','å››','五','å…­'], - weekHeader: '周', - dateFormat: 'yy-mm-dd', + dateFormat: 'yyyy-mm-dd', firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-CN']); -}); + prevText: '<上月', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '下月>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: '今天', currentStatus: '', + todayText: '今天', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: '关闭', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: '周', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['zh-CN']); +})(jQuery); diff --git a/ui/i18n/jquery.ui.datepicker-zh-HK.js b/ui/i18n/jquery.ui.datepicker-zh-HK.js index 06c4c628c40..5a1f3162c38 100644 --- a/ui/i18n/jquery.ui.datepicker-zh-HK.js +++ b/ui/i18n/jquery.ui.datepicker-zh-HK.js @@ -1,23 +1 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by SCCY (samuelcychan@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-HK'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','乿œˆ','åæœˆ','å一月','å二月'], - monthNamesShort: ['一','二','三','å››','五','å…­', - '七','å…«','ä¹','å','å一','å二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['æ—¥','一','二','三','å››','五','å…­'], - weekHeader: '周', - dateFormat: 'dd-mm-yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-HK']); -}); +/* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by SCCY (samuelcychan@gmail.com). */ (function($) { $.ui.datepicker.regional['zh-HK'] = { renderer: $.extend({}, $.ui.datepicker.defaultRenderer, {month: $.ui.datepicker.defaultRenderer.month. replace(/monthHeader:M yyyy/, 'monthHeader:yyyyå¹´ M')}), monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','乿œˆ','åæœˆ','å一月','å二月'], monthNamesShort: ['一','二','三','å››','五','å…­', '七','å…«','ä¹','å','å一','å二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['æ—¥','一','二','三','å››','五','å…­'], dateFormat: 'dd-mm-yyyy', firstDay: 0, prevText: '<上月', prevStatus: '', prevJumpText: '<<', prevJumpStatus: '', nextText: '下月>', nextStatus: '', nextJumpText: '>>', nextJumpStatus: '', currentText: '今天', currentStatus: '', todayText: '今天', todayStatus: '', clearText: '-', clearStatus: '', closeText: '關閉', closeStatus: '', yearStatus: '', monthStatus: '', weekText: '周', weekStatus: '', dayStatus: 'DD d MM', defaultStatus: '', isRTL: false }; $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['zh-HK']); })(jQuery); \ No newline at end of file diff --git a/ui/i18n/jquery.ui.datepicker-zh-TW.js b/ui/i18n/jquery.ui.datepicker-zh-TW.js index d211573c678..fe70f707d8e 100644 --- a/ui/i18n/jquery.ui.datepicker-zh-TW.js +++ b/ui/i18n/jquery.ui.datepicker-zh-TW.js @@ -1,11 +1,10 @@ /* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Ressol (ressol@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-TW'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', +(function($) { + $.ui.datepicker.regional['zh-TW'] = { + renderer: $.extend({}, $.ui.datepicker.defaultRenderer, + {month: $.ui.datepicker.defaultRenderer.month. + replace(/monthHeader:M yyyy/, 'monthHeader:yyyyå¹´ M')}), monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','乿œˆ','åæœˆ','å一月','å二月'], monthNamesShort: ['一','二','三','å››','五','å…­', @@ -13,11 +12,21 @@ jQuery(function($){ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['æ—¥','一','二','三','å››','五','å…­'], - weekHeader: '周', - dateFormat: 'yy/mm/dd', + dateFormat: 'yyyy/mm/dd', firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-TW']); -}); + prevText: '<上月', prevStatus: '', + prevJumpText: '<<', prevJumpStatus: '', + nextText: '下月>', nextStatus: '', + nextJumpText: '>>', nextJumpStatus: '', + currentText: '今天', currentStatus: '', + todayText: '今天', todayStatus: '', + clearText: '-', clearStatus: '', + closeText: '關閉', closeStatus: '', + yearStatus: '', monthStatus: '', + weekText: '周', weekStatus: '', + dayStatus: 'DD d MM', + defaultStatus: '', + isRTL: false + }; + $.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['zh-TW']); +})(jQuery); diff --git a/ui/jquery.ui.datepicker.ext.js b/ui/jquery.ui.datepicker.ext.js new file mode 100644 index 00000000000..48f66ddab3a --- /dev/null +++ b/ui/jquery.ui.datepicker.ext.js @@ -0,0 +1,109 @@ +/* + * jQuery UI Datepicker @VERSION + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/DatepickerExt + * + * Depends: + * jquery.ui.datepicker.js + */ + +(function($) { + +$.extend($.ui.datepicker, { + + // Template for generating a calendar picker showing week of year + weekOfYearRenderer: $.extend({}, $.ui.datepicker.defaultRenderer, { + weekHeader: '' + + '{l10n:weekText}{days}', + week: '{weekOfYear}{days}' + }), + + /* Don't allow weekends to be selected. + Usage: onDate: $.ui.datepicker.noWeekends. + @param date (Date) the current date + @return (object) information about this date */ + noWeekends: function(date) { + return {selectable: (date.getDay() || 7) < 6}; + }, + + /* Change the first day of the week by clicking on the day header. + Usage: onShow: $.ui.datepicker.changeFirstDay. + @param picker (jQuery) the completed datepicker division + @param dp (object) the current instance settings */ + changeFirstDay: function(picker, dp) { + var target = $(this); + picker.find('th span').each(function() { + if (this.parentNode.className.match(/.*ui-datepicker-week.*/)) { + return; + } + $('' + $(this).text() + ''). + click(function() { + var dow = parseInt(this.className.replace(/^.*ui-datepicker-dow-(\d+).*$/, '$1'), 10); + dp.option({firstDay: dow}); + }). + replaceAll(this); + }); + }, + + /* Add a callback when hovering over dates. + Usage: onShow: $.ui.datepicker.hoverCallback(onHover). + @param onHover (function) the callback when hovering, + it receives the current date and a flag indicating selectability + as parameters on entry, and no parameters on exit, + this refers to the target input or division */ + hoverCallback: function(onHover) { + return function(picker, dp) { + var target = this; + var renderer = dp._get('renderer'); + picker.find(renderer.daySelector + ' a, ' + renderer.daySelector + ' span'). + hover(function() { + onHover.apply(dp.element, [dp.retrieveDate(this), + this.nodeName.toLowerCase() == 'a']); + }, + function() { onHover.apply(dp.element, []); }); + }; + }, + + /* Highlight the entire week when hovering over it. + Usage: onShow: $.ui.datepicker.highlightWeek. + @param picker (jQuery) the completed datepicker division + @param dp (object) the current instance settings */ + highlightWeek: function(picker, dp) { + var target = this; + var renderer = dp._get('renderer'); + picker.find(renderer.daySelector + ' a, ' + renderer.daySelector + ' span'). + hover(function() { + $(this).parents('tr').find(renderer.daySelector + ' *'). + addClass(renderer.highlightedClass); + }, + function() { + $(this).parents('tr').find(renderer.daySelector + ' *'). + removeClass(renderer.highlightedClass); + }); + }, + + /* Show a status bar with messages. + Usage: onShow: $.ui.datepicker.showStatus. + @param picker (jQuery) the completed datepicker division + @param dp (object) the current instance settings */ + showStatus: function(picker, dp) { + var target = this; + var renderer = dp._get('renderer'); + var defaultStatus = dp._get('defaultStatus') || ' '; + var status = $('
' + defaultStatus + '
'). + insertAfter(picker.find('.ui-datepicker-row-break:last')); + picker.find('*[title]').each(function() { + var title = $(this).attr('title'); + $(this).removeAttr('title').hover( + function() { status.text(title || defaultStatus); }, + function() { status.text(defaultStatus); }); + }); + } +}); + +})(jQuery); diff --git a/ui/jquery.ui.datepicker.js b/ui/jquery.ui.datepicker.js index e41ae62a34d..32698e1a9f1 100644 --- a/ui/jquery.ui.datepicker.js +++ b/ui/jquery.ui.datepicker.js @@ -1,7 +1,7 @@ /* * jQuery UI Datepicker @VERSION * - * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * @@ -9,232 +9,334 @@ * * Depends: * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js */ -(function($) { // hide the namespace - -$.extend($.ui, { datepicker: { version: "@VERSION" } }); - -var PROP_NAME = 'datepicker'; -var dpuuid = new Date().getTime(); - -/* Date picker manager. - Use the singleton instance of this class, $.datepicker, to interact with the date picker. - Settings for (groups of) date pickers are maintained in an instance object, - allowing multiple different settings on the same page. */ - -function Datepicker() { - this.debug = false; // Change this to true to start debugging - this._curInst = null; // The current instance in use - this._keyEvent = false; // If the last event was a key event - this._disabledInputs = []; // List of date picker inputs that have been disabled - this._datepickerShowing = false; // True if the popup picker is showing , false if not - this._inDialog = false; // True if showing within a "dialog", false if not - this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division - this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class - this._appendClass = 'ui-datepicker-append'; // The name of the append marker class - this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class - this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class - this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class - this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class - this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class - this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class - this.regional = []; // Available regional settings, indexed by language code - this.regional[''] = { // Default regional settings - closeText: 'Done', // Display text for close link - prevText: 'Prev', // Display text for previous month link - nextText: 'Next', // Display text for next month link - currentText: 'Today', // Display text for current month link - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], // Names of months for drop-down and formatting - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday - weekHeader: 'Wk', // Column header for week of the year - dateFormat: 'mm/dd/yy', // See format options on parseDate - firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... - isRTL: false, // True if right-to-left language, false if left-to-right - showMonthAfterYear: false, // True if the year select precedes month, false for month then year - yearSuffix: '' // Additional text to append to the year in the month headers - }; - this._defaults = { // Global defaults for all the date picker instances - showOn: 'focus', // 'focus' for popup on focus, - // 'button' for trigger button, or 'both' for either - showAnim: 'show', // Name of jQuery animation for popup - showOptions: {}, // Options for enhanced animations - defaultDate: null, // Used when field is blank: actual date, - // +/-number for offset from today, null for today - appendText: '', // Display text following the input box, e.g. showing the format - buttonText: '...', // Text for trigger button - buttonImage: '', // URL for trigger button image - buttonImageOnly: false, // True if the image appears alone, false if it appears on a button - hideIfNoPrevNext: false, // True to hide next/previous month links - // if not applicable, false to just disable them - navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links - gotoCurrent: false, // True if today link goes back to current selection instead - changeMonth: false, // True if month can be selected directly, false if only prev/next - changeYear: false, // True if year can be selected directly, false if only prev/next - yearRange: 'c-10:c+10', // Range of years to display in drop-down, - // either relative to today's year (-nn:+nn), relative to currently displayed year - // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) - showOtherMonths: false, // True to show dates in other months, false to leave blank - selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable - showWeek: false, // True to show week of the year, false to not show it - calculateWeek: this.iso8601Week, // How to calculate the week of the year, - // takes a Date and returns the number of the week for it - shortYearCutoff: '+10', // Short year values < this are in the current century, - // > this are in the previous century, - // string value starting with '+' for current year + value - minDate: null, // The earliest selectable date, or null for no limit - maxDate: null, // The latest selectable date, or null for no limit - duration: '_default', // Duration of display/closure - beforeShowDay: null, // Function that takes a date and returns an array with - // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', - // [2] = cell title (optional), e.g. $.datepicker.noWeekends - beforeShow: null, // Function that takes an input field and - // returns a set of custom settings for the date picker - onSelect: null, // Define a callback function when a date is selected - onChangeMonthYear: null, // Define a callback function when the month or year is changed - onClose: null, // Define a callback function when the datepicker is closed - numberOfMonths: 1, // Number of months to show at a time - showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) - stepMonths: 1, // Number of months to step back/forward - stepBigMonths: 12, // Number of months to step back/forward for the big links - altField: '', // Selector for an alternate field to store selected dates into - altFormat: '', // The date format to use for the alternate field - constrainInput: true, // The input is constrained by the current date format - showButtonPanel: false, // True to show button panel, false to not show it - autoSize: false // True to size the input for the date format, false to leave as is - }; - $.extend(this._defaults, this.regional['']); - this.dpDiv = $('
'); -} +(function($) { + +var popupClass = '-popup'; // Marker for popup division +var triggerClass = '-trigger'; // Marker for trigger element +var disabledClass = '-disabled'; // Marker for disabled element +var coverClass = '-cover'; // Marker for iframe backing element +var monthYearClass = '-month-year'; // Marker for month/year inputs +var curMonthClass = '-month-'; // Marker for current month/year +var anyYearClass = '-any-year'; // Marker for year direct input +var curDoWClass = '-dow-'; // Marker for day of week + +var curDP = null; // The current datepicker instance showing + +var ticksTo1970 = (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 1000 * 10000); + +var defaultRenderer = { // Default template for generating a calendar picker + // Anywhere: '{l10n:name}' to insert localised value for name, + // '{link:name}' to insert a link trigger for command name, + // '{button:name}' to insert a button trigger for command name, + // '{popup:start}...{popup:end}' to mark a section for inclusion in a popup datepicker only, + // '{inline:start}...{inline:end}' to mark a section for inclusion in an inline datepicker only + // Overall structure: '{months}' to insert calendar months + picker: '' + + '{link:prev}{link:next}{months}
', + // One row of months: '{months}' to insert calendar months + monthRow: '
{months}
', + // A single month: '{monthHeader:dateFormat}' to insert the month header - + // dateFormat is optional and defaults to 'M yyyy', + // '{weekHeader}' to insert a week header, '{weeks}' to insert the month's weeks + month: '
{monthHeader:M yyyy}
' + + '{weekHeader}{weeks}
', + // A week header: '{days}' to insert individual day names + weekHeader: '{days}', + // Individual day header: '{day}' to insert day name + dayHeader: '{day}', + // One week of the month: '{days}' to insert the week's days, '{weekOfYear}' to insert week of year + week: '{days}', + // An individual day: '{day}' to insert day value + day: '{day}', + // jQuery selector, relative to picker, for a single month + monthSelector: '.ui-datepicker-group', + // jQuery selector, relative to picker, for individual days + daySelector: 'td', + // Class for right-to-left (RTL) languages + rtlClass: 'ui-datepicker-rtl', + // Class for multi-month datepickers + multiClass: 'ui-datepicker-multi', + // Class for selectable dates + defaultClass: 'ui-state-default', + // Class for currently selected dates + selectedClass: 'ui-state-active', + // Class for highlighted dates + highlightedClass: 'ui-state-hover', + // Class for today + todayClass: 'ui-state-highlight', + // Class for days from other months + otherMonthClass: 'ui-datepicker-other-month', + // Class for days on weekends + weekendClass: 'ui-datepicker-week-end', + // Class prefix for commands + commandClass: 'ui-datepicker-cmd', + // Extra class(es) for commands that are buttons + commandButtonClass: 'ui-state-default ui-corner-all', + // Extra class(es) for commands that are links + commandLinkClass: 'ui-icon', + // Class for disabled commands + disabledClass: 'ui-datepicker-disabled' +}; -$.extend(Datepicker.prototype, { - /* Class name added to elements to indicate already configured with a date picker. */ - markerClassName: 'hasDatepicker', +// Template to include today and close buttons at the bottom +var buttonsRenderer = $.extend({}, defaultRenderer, { + picker: defaultRenderer.picker.replace(/\{months\}/, + '{months}
' + + '{button:today}{popup:start}{button:close}{popup:end}
') +}); - /* Debug logging (if enabled). */ - log: function () { - if (this.debug) - console.log.apply('', arguments); +var defaultCommands = { // Command actions that may be added to a layout by name + // name: { // The command name, use '{button:name}' or '{link:name}' in layouts + // text: '', // The field in the regional settings for the displayed text + // status: '', // The field in the regional settings for the status text + // // The keystroke to trigger the action + // keystroke: {keyCode: nn, ctrlKey: boolean, altKey: boolean, shiftKey: boolean}, + // enabled: fn, // The function that indicates the command is enabled + // date: fn, // The function to get the date associated with this action + // action: fn} // The function that implements the action + prev: {text: 'prevText', status: 'prevStatus', // Previous month + keystroke: {keyCode: $.ui.keyCode.PAGE_UP}, + enabled: function(dp) { + var minDate = dp._get('minDate'); + var curDate = $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), + -dp._get('monthsOffset'), 'm'); + curDate.setDate(0); + return (!minDate || curDate.getTime() >= minDate.getTime()); }, + date: function(dp) { + var minDate = dp._get('minDate'); + var curDate = $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), + 0 - dp._get('monthsToStep') - dp._get('monthsOffset'), 'm'); + curDate.setDate(1); + return (minDate && minDate.getTime() > curDate.getTime() ? minDate : curDate); }, + action: function(dp) { dp.changeMonth(-dp._get('monthsToStep')); } }, - - // TODO rename to "widget" when switching to widget factory - _widgetDatepicker: function() { - return this.dpDiv; + prevJump: {text: 'prevJumpText', status: 'prevJumpStatus', // Previous year + keystroke: {keyCode: $.ui.keyCode.PAGE_UP, ctrlKey: true}, + enabled: function(dp) { + var minDate = dp._get('minDate'); + var curDate = $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), + -dp._get('monthsOffset'), 'm'); + curDate.setDate(0); + return (!minDate || curDate.getTime() >= minDate.getTime()); }, + date: function(dp) { + var minDate = dp._get('minDate'); + var curDate = $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), + 0 - dp._get('monthsToJump') - dp._get('monthsOffset'), 'm'); + curDate.setDate(1); + return (minDate && minDate.getTime() > curDate.getTime() ? minDate : curDate); }, + action: function(dp) { dp.changeMonth(-dp._get('monthsToJump')); } }, - - /* Override the default settings for all instances of the date picker. - @param settings object - the new settings to use as defaults (anonymous object) - @return the manager object */ - setDefaults: function(settings) { - extendRemove(this._defaults, settings || {}); - return this; + next: {text: 'nextText', status: 'nextStatus', // Next month + keystroke: {keyCode: $.ui.keyCode.PAGE_DOWN}, + enabled: function(dp) { + var maxDate = dp._get('maxDate'); + var curDate = $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), + 1 - dp._get('monthsOffset'), 'm'); + curDate.setDate(1); + return (!maxDate || curDate.getTime() <= maxDate.getTime()); }, + date: function(dp) { + var maxDate = dp._get('maxDate'); + var curDate = $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), + dp._get('monthsToStep') - dp._get('monthsOffset'), 'm'); + curDate.setDate(1); + return (maxDate && maxDate.getTime() < curDate.getTime() ? maxDate : curDate); }, + action: function(dp) { dp.changeMonth(dp._get('monthsToStep')); } + }, + nextJump: {text: 'nextJumpText', status: 'nextJumpStatus', // Next year + keystroke: {keyCode: $.ui.keyCode.PAGE_DOWN, ctrlKey: true}, + enabled: function(dp) { + var maxDate = dp._get('maxDate'); + var curDate = $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), + 1 - dp._get('monthsOffset'), 'm'); + curDate.setDate(1); + return (!maxDate || curDate.getTime() <= maxDate.getTime()); }, + date: function(dp) { + var maxDate = dp._get('maxDate'); + var curDate = $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), + dp._get('monthsToJump') - dp._get('monthsOffset'), 'm'); + curDate.setDate(1); + return (maxDate && maxDate.getTime() < curDate.getTime() ? maxDate : curDate); }, + action: function(dp) { dp.changeMonth(dp._get('monthsToJump')); } + }, + today: {text: 'todayText', status: 'todayStatus', // Today's month + keystroke: {keyCode: $.ui.keyCode.HOME, ctrlKey: true}, + enabled: function(dp) { + var minDate = dp._get('minDate'); + var maxDate = dp._get('maxDate'); + var curDate = $.ui.datepicker.newDate(); + return (!minDate || curDate.getTime() >= minDate.getTime()) && + (!maxDate || curDate.getTime() <= maxDate.getTime()); }, + date: function(dp) { return $.ui.datepicker.newDate(); }, + action: function(dp) { + var today = new Date(); + dp.showMonth(today.getFullYear(), today.getMonth() + 1, today.getDate()); } + }, + current: {text: 'currentText', status: 'currentStatus', // Current month + keystroke: {keyCode: $.ui.keyCode.HOME, ctrlKey: true}, + enabled: function(dp) { + var minDate = dp._get('minDate'); + var maxDate = dp._get('maxDate'); + var curDate = dp._selectedDate || $.ui.datepicker.newDate(); + return (!minDate || curDate.getTime() >= minDate.getTime()) && + (!maxDate || curDate.getTime() <= maxDate.getTime()); }, + date: function(dp) { return dp._selectedDate || $.ui.datepicker.newDate(); }, + action: function(dp) { + var curDate = dp._selectedDate || $.ui.datepicker.newDate(); + dp.showMonth(curDate.getFullYear(), curDate.getMonth() + 1); } + }, + clear: {text: 'clearText', status: 'clearStatus', // Clear the datepicker + keystroke: {keyCode: $.ui.keyCode.END, ctrlKey: true}, + enabled: function(dp) { return true; }, + date: function(dp) { return null; }, + action: function(dp) { dp.clear(); } }, + close: {text: 'closeText', status: 'closeStatus', // Close the datepicker + keystroke: {keyCode: $.ui.keyCode.ESCAPE}, + enabled: function(dp) { return true; }, + date: function(dp) { return null; }, + action: function(dp) { dp.hide(); } + }, + prevWeek: {text: 'prevWeekText', status: 'prevWeekStatus', // Previous week + keystroke: {keyCode: $.ui.keyCode.UP, ctrlKey: true}, + enabled: function(dp) { + var minDate = dp._get('minDate'); + return (!minDate || $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), -7, 'd'). + getTime() >= minDate.getTime()); }, + date: function(dp) { return $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), -7, 'd'); }, + action: function(dp) { dp.changeDay(-7); } + }, + prevDay: {text: 'prevDayText', status: 'prevDayStatus', // Previous day + keystroke: {keyCode: $.ui.keyCode.LEFT, ctrlKey: true}, + enabled: function(dp) { + var minDate = dp._get('minDate'); + return (!minDate || $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), -1, 'd'). + getTime() >= minDate.getTime()); }, + date: function(dp) { return $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), -1, 'd'); }, + action: function(dp) { dp.changeDay(-1); } + }, + nextDay: {text: 'nextDayText', status: 'nextDayStatus', // Next day + keystroke: {keyCode: $.ui.keyCode.RIGHT, ctrlKey: true}, + enabled: function(dp) { + var maxDate = dp._get('maxDate'); + return (!maxDate || $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), +1, 'd'). + getTime() <= maxDate.getTime()); }, + date: function(dp) { return $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), +1, 'd'); }, + action: function(dp) { dp.changeDay(+1); } + }, + nextWeek: {text: 'nextWeekText', status: 'nextWeekStatus', // Next week + keystroke: {keyCode: $.ui.keyCode.DOWN, ctrlKey: true}, + enabled: function(dp) { + var maxDate = dp._get('maxDate'); + return (!maxDate || $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), +7, 'd'). + getTime() <= maxDate.getTime()); }, + date: function(dp) { return $.ui.datepicker.add($.ui.datepicker.newDate(dp._drawDate), +7, 'd'); }, + action: function(dp) { dp.changeDay(+7); } + } +}; - /* Attach the date picker to a jQuery selection. - @param target element - the target input field or division or span - @param settings object - the new settings to use for this date picker instance (anonymous) */ - _attachDatepicker: function(target, settings) { - // check for settings on the control itself - in namespace 'date:' - var inlineSettings = null; - for (var attrName in this._defaults) { - var attrValue = target.getAttribute('date:' + attrName); - if (attrValue) { - inlineSettings = inlineSettings || {}; - try { - inlineSettings[attrName] = eval(attrValue); - } catch (err) { - inlineSettings[attrName] = attrValue; - } - } +$.widget('ui.datepicker', { + _init: function() { + if (this.element.hasClass(this.widgetBaseClass)) { + return; } - var nodeName = target.nodeName.toLowerCase(); - var inline = (nodeName == 'div' || nodeName == 'span'); - if (!target.id) - target.id = 'dp' + (++this.uuid); - var inst = this._newInst($(target), inline); - inst.settings = $.extend({}, settings || {}, inlineSettings || {}); - if (nodeName == 'input') { - this._connectDatepicker(target, inst); - } else if (inline) { - this._inlineDatepicker(target, inst); + this.element.addClass(this.widgetBaseClass); + this._selectedDate = null; + this._drawDate = null; + this._inline = $.inArray(this.element[0].nodeName.toLowerCase(), ['div', 'span']) > -1; + if (this._inline) { + this._update(); + } + else { + this._attachments(); + this.element.bind('keydown.' + this.widgetName, this._keyDown). + bind('keypress.' + this.widgetName, this._keyPress). + bind('keyup.' + this.widgetName, this._keyUp); } }, - /* Create a new instance object. */ - _newInst: function(target, inline) { - var id = target[0].id.replace(/([^A-Za-z0-9_])/g, '\\\\$1'); // escape jQuery meta chars - return {id: id, input: target, // associated target - selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection - drawMonth: 0, drawYear: 0, // month being drawn - inline: inline, // is datepicker inline or not - dpDiv: (!inline ? this.dpDiv : // presentation div - $('
'))}; - }, - - /* Attach the date picker to an input field. */ - _connectDatepicker: function(target, inst) { - var input = $(target); - inst.append = $([]); - inst.trigger = $([]); - if (input.hasClass(this.markerClassName)) + destroy: function() { + if (!this.element.hasClass(this.widgetBaseClass)) { return; - this._attachments(input, inst); - input.addClass(this.markerClassName).keydown(this._doKeyDown). - keypress(this._doKeyPress).keyup(this._doKeyUp). - bind("setData.datepicker", function(event, key, value) { - inst.settings[key] = value; - }).bind("getData.datepicker", function(event, key) { - return this._get(inst, key); - }); - this._autoSize(inst); - $.data(target, PROP_NAME, inst); + } + if (curDP == this) { + this.hide(); + } + if (this._button) { + this._button.remove(); + } + if (this._get('autoSize') && !this._inline) { + this.element.removeAttr('size'); + } + this.element.removeClass(this.widgetBaseClass + ' ' + this.widgetBaseClass + + disabledClass + ' ' + this.namespace + '-state-disabled'). + removeAttr('aria-disabled'). + removeData(this.widgetName). + unbind('.' + this.widgetName). + empty(); + return this; }, - /* Make attachments based on settings. */ - _attachments: function(input, inst) { - var appendText = this._get(inst, 'appendText'); - var isRTL = this._get(inst, 'isRTL'); - if (inst.append) - inst.append.remove(); - if (appendText) { - inst.append = $('' + appendText + ''); - input[isRTL ? 'before' : 'after'](inst.append); - } - input.unbind('focus', this._showDatepicker); - if (inst.trigger) - inst.trigger.remove(); - var showOn = this._get(inst, 'showOn'); - if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field - input.focus(this._showDatepicker); - if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked - var buttonText = this._get(inst, 'buttonText'); - var buttonImage = this._get(inst, 'buttonImage'); - inst.trigger = $(this._get(inst, 'buttonImageOnly') ? - $('').addClass(this._triggerClass). - attr({ src: buttonImage, alt: buttonText, title: buttonText }) : - $('').addClass(this._triggerClass). - html(buttonImage == '' ? buttonText : $('').attr( - { src:buttonImage, alt:buttonText, title:buttonText }))); - input[isRTL ? 'before' : 'after'](inst.trigger); - inst.trigger.click(function() { - if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) - $.datepicker._hideDatepicker(); - else - $.datepicker._showDatepicker(input[0]); - return false; - }); + /* Retrieve current option value, computing date values if necessary. + @param key (string) the option name + @return (any) the option value */ + _get: function(key) { + var value = (this.options[key] != null ? this.options[key] : $.ui.datepicker.defaults[key]); + if (key == 'defaultDate' || key == 'minDate' || key == 'maxDate') { + value = $.ui.datepicker.determineDate(value, null, this._selectedDate, + this._get('dateFormat'), this._getDateSettings()); + } + return value; + }, + + /* Refresh the datepicker when values are updated. + @param key (string) the option name + @param value (any) the new value */ + _setOption: function(key, value) { + $.Widget.prototype._setOption.apply(this, arguments); + this._drawDate = this._checkMinMax(this._drawDate); + this._selectedDate = this._checkMinMax(this._extractDate(this.element.val())); + if (!this._inline) { + this._attachments(); + } + this._update(); + }, + + /* Attach events and trigger, if necessary. */ + _attachments: function() { + this.element.unbind('focus.' + this.widgetName); + if (this._get('showOnFocus')) { + this.element.bind('focus.' + this.widgetName, this.show); + } + if (this._button) { + this._button.remove(); + } + var self = this; + this._button = (!this._get('showTrigger') ? $([]) : + $(this._get('showTrigger')).clone().addClass(this.widgetBaseClass + triggerClass) + [this._get('isRTL') ? 'insertBefore' : 'insertAfter'](this.element). + click(function() { + if (!self.isDisabled()) { + self[curDP == self ? 'hide' : 'show'](); + } + })); + this._autoSize(); + if (this._get('selectDefaultDate') && this._get('defaultDate') && !this._selectedDate) { + this.setDate(this.element, (this._get('defaultDate') || $.ui.datepicker.newDate())); } }, /* Apply the maximum length for the date format. */ - _autoSize: function(inst) { - if (this._get(inst, 'autoSize') && !inst.inline) { - var date = new Date(2009, 12 - 1, 20); // Ensure double digits - var dateFormat = this._get(inst, 'dateFormat'); + _autoSize: function() { + if (this._get('autoSize') && !this._inline) { + var date = $.ui.datepicker.newDate(2009, 10, 20); // Ensure double digits + var dateFormat = this._get('dateFormat'); if (dateFormat.match(/[DM]/)) { var findMax = function(names) { var max = 0; @@ -247,1481 +349,1304 @@ $.extend(Datepicker.prototype, { } return maxI; }; - date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? - 'monthNames' : 'monthNamesShort')))); - date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? - 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); + date.setMonth(findMax(this._get(this._get('dateFormat').match(/MM/) ? // Longest month + 'monthNames' : 'monthNamesShort'))); + date.setDate(findMax(this._get(this._get('dateFormat').match(/DD/) ? // Longest day + 'dayNames' : 'dayNamesShort')) + 20 - date.getDay()); } - inst.input.attr('size', this._formatDate(inst, date).length); + this.element.attr('size', $.ui.datepicker.formatDate( + dateFormat, date, this._getDateSettings()).length); } }, - /* Attach an inline date picker to a div. */ - _inlineDatepicker: function(target, inst) { - var divSpan = $(target); - if (divSpan.hasClass(this.markerClassName)) + /* Enable the datepicker and any associated trigger. */ + enable: function() { + if (!this.element.hasClass(this.widgetBaseClass)) { return; - divSpan.addClass(this.markerClassName).append(inst.dpDiv). - bind("setData.datepicker", function(event, key, value){ - inst.settings[key] = value; - }).bind("getData.datepicker", function(event, key){ - return this._get(inst, key); - }); - $.data(target, PROP_NAME, inst); - this._setDate(inst, this._getDefaultDate(inst), true); - this._updateDatepicker(inst); - this._updateAlternate(inst); - }, - - /* Pop-up the date picker in a "dialog" box. - @param input element - ignored - @param date string or Date - the initial date to display - @param onSelect function - the function to call when a date is selected - @param settings object - update the dialog date picker instance's settings (anonymous object) - @param pos int[2] - coordinates for the dialog's position within the screen or - event - with x/y coordinates or - leave empty for default (screen centre) - @return the manager object */ - _dialogDatepicker: function(input, date, onSelect, settings, pos) { - var inst = this._dialogInst; // internal instance - if (!inst) { - var id = 'dp' + (++this.uuid); - this._dialogInput = $(''); - this._dialogInput.keydown(this._doKeyDown); - $('body').append(this._dialogInput); - inst = this._dialogInst = this._newInst(this._dialogInput, false); - inst.settings = {}; - $.data(this._dialogInput[0], PROP_NAME, inst); - } - extendRemove(inst.settings, settings || {}); - date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); - this._dialogInput.val(date); - - this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); - if (!this._pos) { - var browserWidth = document.documentElement.clientWidth; - var browserHeight = document.documentElement.clientHeight; - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - this._pos = // should use actual width/height below - [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; } - - // move input on screen for focus, but hidden behind dialog - this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); - inst.settings.onSelect = onSelect; - this._inDialog = true; - this.dpDiv.addClass(this._dialogClass); - this._showDatepicker(this._dialogInput[0]); - if ($.blockUI) - $.blockUI(this.dpDiv); - $.data(this._dialogInput[0], PROP_NAME, inst); - return this; - }, - - /* Detach a datepicker from its control. - @param target element - the target input field or division or span */ - _destroyDatepicker: function(target) { - var $target = $(target); - var inst = $.data(target, PROP_NAME); - if (!$target.hasClass(this.markerClassName)) { - return; + this.element.removeClass(this.widgetBaseClass + disabledClass); + if (this._inline) + this.element.children('.' + this.widgetBaseClass + disabledClass).remove().end(). + find('button,select').attr('disabled', '').end(). + find('a').attr('href', 'javascript:void(0)'); + else { + this.element[0].disabled = false; + this._button.filter('button.' + this.widgetBaseClass + triggerClass). + attr('disabled', '').end(). + filter('img.' + this.widgetBaseClass + triggerClass). + css({opacity: '1.0', cursor: ''}); } - var nodeName = target.nodeName.toLowerCase(); - $.removeData(target, PROP_NAME); - if (nodeName == 'input') { - inst.append.remove(); - inst.trigger.remove(); - $target.removeClass(this.markerClassName). - unbind('focus', this._showDatepicker). - unbind('keydown', this._doKeyDown). - unbind('keypress', this._doKeyPress). - unbind('keyup', this._doKeyUp); - } else if (nodeName == 'div' || nodeName == 'span') - $target.removeClass(this.markerClassName).empty(); }, - /* Enable the date picker to a jQuery selection. - @param target element - the target input field or division or span */ - _enableDatepicker: function(target) { - var $target = $(target); - var inst = $.data(target, PROP_NAME); - if (!$target.hasClass(this.markerClassName)) { + /* Disable the datepicker and any associated trigger. */ + disable: function() { + if (!this.element.hasClass(this.widgetBaseClass)) return; + this.element.addClass(this.widgetBaseClass + disabledClass); + if (this._inline) { + var inline = this.element.children(':last'); + var offset = inline.offset(); + var relOffset = {left: 0, top: 0}; + inline.parents().each(function() { + if ($(this).css('position') == 'relative') { + relOffset = $(this).offset(); + return false; + } + }); + this.element.prepend('
'). + find('button,select').attr('disabled', 'disabled').end(). + find('a').removeAttr('href'); } - var nodeName = target.nodeName.toLowerCase(); - if (nodeName == 'input') { - target.disabled = false; - inst.trigger.filter('button'). - each(function() { this.disabled = false; }).end(). - filter('img').css({opacity: '1.0', cursor: ''}); - } - else if (nodeName == 'div' || nodeName == 'span') { - var inline = $target.children('.' + this._inlineClass); - inline.children().removeClass('ui-state-disabled'); + else { + this.hide(); + this.element[0].disabled = true; + this._button.filter('button.' + this.widgetBaseClass + triggerClass). + attr('disabled', 'disabled').end(). + filter('img.' + this.widgetBaseClass + triggerClass). + css({opacity: '0.5', cursor: 'default'}); } - this._disabledInputs = $.map(this._disabledInputs, - function(value) { return (value == target ? null : value); }); // delete entry }, - /* Disable the date picker to a jQuery selection. - @param target element - the target input field or division or span */ - _disableDatepicker: function(target) { - var $target = $(target); - var inst = $.data(target, PROP_NAME); - if (!$target.hasClass(this.markerClassName)) { + /* Is the first field in a jQuery collection disabled as a datepicker? + @return (boolean) true if disabled, false if enabled */ + isDisabled: function() { + return this.element.hasClass(this.widgetBaseClass + disabledClass); + }, + + /* Show a popup datepicker. + @param event (Event) the triggering event */ + show: function(event) { + var self = (event && $.ui.datepicker.getInstance(event.target)) || this; + if (curDP == self) { return; } - var nodeName = target.nodeName.toLowerCase(); - if (nodeName == 'input') { - target.disabled = true; - inst.trigger.filter('button'). - each(function() { this.disabled = true; }).end(). - filter('img').css({opacity: '0.5', cursor: 'default'}); + if (curDP) { + self.hide(true); } - else if (nodeName == 'div' || nodeName == 'span') { - var inline = $target.children('.' + this._inlineClass); - inline.children().addClass('ui-state-disabled'); + if (self) { + curDP = self + // Retrieve existing date(s) + self._selectedDate = self._extractDate(self.element.val()); + self._drawDate = self._checkMinMax((self._selectedDate || + self._get('defaultDate') || $.ui.datepicker.newDate()), self); + self._prevDate = $.ui.datepicker.newDate(self._drawDate); + // Generate content + self._update(true); + // Adjust position before showing + var edge = (self._get('isRTL') ? 'right' : 'left'); + self._div.position({my: self._get('myPosition') || edge + ' top', + at: self._get('atPosition') || edge + ' bottom', of: self.element}); + // And display + var showAnim = self._get('showAnim'); + var showSpeed = self._get('showSpeed'); + showSpeed = (showSpeed == 'normal' ? '_default' : showSpeed); + var postProcess = function() { + var borders = self._getBorders(self._div); + self._div.find('.' + this.widgetBaseClass + coverClass). // IE6- only + css({left: -borders[0], top: -borders[1], + width: self._div.outerWidth() + borders[0], + height: self._div.outerHeight() + borders[1]}); + }; + if ($.effects && $.effects[showAnim]) { + self._div.show(showAnim, self._get('showOptions'), showSpeed, postProcess); + } + else { + self._div[showAnim || 'show']((showAnim ? showSpeed : ''), postProcess); + } + if (!showAnim) { + postProcess(); + } } - this._disabledInputs = $.map(this._disabledInputs, - function(value) { return (value == target ? null : value); }); // delete entry - this._disabledInputs[this._disabledInputs.length] = target; }, - /* Is the first field in a jQuery collection disabled as a datepicker? - @param target element - the target input field or division or span - @return boolean - true if disabled, false if enabled */ - _isDisabledDatepicker: function(target) { - if (!target) { - return false; + /* Extract a possible date from a string. + @param dateText (string) the text to extract from + @return (Date) the extracted date */ + _extractDate: function(dateText) { + try { + return $.ui.datepicker.parseDate( + this._get('dateFormat'), dateText, this._getDateSettings()); } - for (var i = 0; i < this._disabledInputs.length; i++) { - if (this._disabledInputs[i] == target) - return true; + catch (e) { + // Ignore } - return false; + return null; }, - /* Retrieve the instance data for the target control. - @param target element - the target input field or division or span - @return object - the associated instance data - @throws error if a jQuery problem getting data */ - _getInst: function(target) { - try { - return $.data(target, PROP_NAME); + /* Update the datepicker display. + @param hidden (boolean) true to initially hide the datepicker */ + _update: function(hidden) { + if (this._inline) { + this.element.html(this._generateContent()); } - catch (err) { - throw 'Missing instance data for this datepicker'; + else if (curDP == this) { + if (!this._div) { + this._div = $('
').addClass(this.widgetBaseClass + popupClass). + css({display: (hidden ? 'none' : 'static'), position: 'absolute', + left: this.element.offset().left, + top: this.element.offset().top + this.element.outerHeight()}). + appendTo($(this._get('popupContainer') || 'body')); + } + this._div.html(this._generateContent()); + this.element.focus(); } - }, - - /* Update or retrieve the settings for a date picker attached to an input field or division. - @param target element - the target input field or division or span - @param name object - the new settings to update or - string - the name of the setting to change or retrieve, - when retrieving also 'all' for all instance settings or - 'defaults' for all global defaults - @param value any - the new value for the setting - (omit if above is an object or to retrieve a value) */ - _optionDatepicker: function(target, name, value) { - var inst = this._getInst(target); - if (arguments.length == 2 && typeof name == 'string') { - return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : - (inst ? (name == 'all' ? $.extend({}, inst.settings) : - this._get(inst, name)) : null)); - } - var settings = name || {}; - if (typeof name == 'string') { - settings = {}; - settings[name] = value; - } - if (inst) { - if (this._curInst == inst) { - this._hideDatepicker(); + if (this._inline || curDP == this) { + if (!this._prevDate || this._prevDate.getFullYear() != this._drawDate.getFullYear() || + this._prevDate.getMonth() != this._drawDate.getMonth()) { + this._trigger('changeMonthYear', null, $.ui.datepicker.newDate( + this._drawDate.getFullYear(), this._drawDate.getMonth() + 1, 1)); } - var date = this._getDateDatepicker(target, true); - extendRemove(inst.settings, settings); - this._attachments($(target), inst); - this._autoSize(inst); - this._setDateDatepicker(target, date); - this._updateDatepicker(inst); } }, - // change method deprecated - _changeDatepicker: function(target, name, value) { - this._optionDatepicker(target, name, value); - }, - - /* Redraw the date picker attached to an input field or division. - @param target element - the target input field or division or span */ - _refreshDatepicker: function(target) { - var inst = this._getInst(target); - if (inst) { - this._updateDatepicker(inst); + /* Update the input field and any alternate field with the current dates. + @param keyUp (boolean, internal) true if coming from keyUp processing */ + _updateInput: function(keyUp) { + var dateSettings = this._getDateSettings(); + var value = (keyUp ? '' : $.ui.datepicker.formatDate(this._get('dateFormat'), + this._selectedDate, dateSettings)); + var altValue = $.ui.datepicker.formatDate(this._get('altFormat') || this._get('dateFormat'), + this._selectedDate, dateSettings); + if (!this._inline && !keyUp) { + this.element.val(value); + } + $(this._get('altField')).val(altValue); + if (!keyUp && !this._inSelect) { + this._inSelect = true; // Prevent endless loops + this._trigger('select', null, this._selectedDate); + this._inSelect = false; } }, - /* Set the dates for a jQuery selection. - @param target element - the target input field or division or span - @param date Date - the new date */ - _setDateDatepicker: function(target, date) { - var inst = this._getInst(target); - if (inst) { - this._setDate(inst, date); - this._updateDatepicker(inst); - this._updateAlternate(inst); - } + /* Retrieve the size of left and top borders for an element. + @param elem (jQuery) the element of interest + @return (number[2]) the left and top borders */ + _getBorders: function(elem) { + var convert = function(value) { + var extra = ($.browser.msie ? 1 : 0); + return {thin: 1 + extra, medium: 3 + extra, thick: 5 + extra}[value] || value; + }; + return [parseFloat(convert(elem.css('border-left-width'))), + parseFloat(convert(elem.css('border-top-width')))]; }, - /* Get the date(s) for the first entry in a jQuery selection. - @param target element - the target input field or division or span - @param noDefault boolean - true if no default date is to be used - @return Date - the current date */ - _getDateDatepicker: function(target, noDefault) { - var inst = this._getInst(target); - if (inst && !inst.inline) - this._setDateFromField(inst, noDefault); - return (inst ? this._getDate(inst) : null); + /* Hide a popup datepicker. + @param immediate (boolean) true to close immediately without animation */ + hide: function(immediate) { + if (this == curDP || immediate) { + var showAnim = (immediate ? '' : curDP._get('showAnim')); + var showSpeed = curDP._get('showSpeed'); + showSpeed = (showSpeed == 'normal' ? '_default' : showSpeed); + var postProcess = function() { + curDP._div.remove(); + curDP._div = null; + curDP._trigger('close', null, curDP._selectedDate); + curDP = null; + }; + curDP._div.stop(); + if ($.effects && $.effects[showAnim]) { + curDP._div.hide(showAnim, curDP._get('showOptions'), showSpeed, postProcess); + } + else { + var hideAnim = (showAnim == 'slideDown' ? 'slideUp' : + (showAnim == 'fadeIn' ? 'fadeOut' : 'hide')); + curDP._div[hideAnim]((showAnim ? showSpeed : ''), postProcess); + } + if (!showAnim) { + postProcess(); + } + } }, - /* Handle keystrokes. */ - _doKeyDown: function(event) { - var inst = $.datepicker._getInst(event.target); - var handled = true; - var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); - inst._keyEvent = true; - if ($.datepicker._datepickerShowing) - switch (event.keyCode) { - case 9: $.datepicker._hideDatepicker(); - handled = false; - break; // hide on tab out - case 13: var sel = $('td.' + $.datepicker._dayOverClass, inst.dpDiv). - add($('td.' + $.datepicker._currentClass, inst.dpDiv)); - if (sel[0]) - $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); - else - $.datepicker._hideDatepicker(); - return false; // don't submit the form - break; // select the value on enter - case 27: $.datepicker._hideDatepicker(); - break; // hide on escape - case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? - -$.datepicker._get(inst, 'stepBigMonths') : - -$.datepicker._get(inst, 'stepMonths')), 'M'); - break; // previous month/year on page up/+ ctrl - case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? - +$.datepicker._get(inst, 'stepBigMonths') : - +$.datepicker._get(inst, 'stepMonths')), 'M'); - break; // next month/year on page down/+ ctrl - case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); - handled = event.ctrlKey || event.metaKey; - break; // clear on ctrl or command +end - case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); - handled = event.ctrlKey || event.metaKey; - break; // current on ctrl or command +home - case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); - handled = event.ctrlKey || event.metaKey; - // -1 day on ctrl or command +left - if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? - -$.datepicker._get(inst, 'stepBigMonths') : - -$.datepicker._get(inst, 'stepMonths')), 'M'); - // next month/year on alt +left on Mac - break; - case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); - handled = event.ctrlKey || event.metaKey; - break; // -1 week on ctrl or command +up - case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); - handled = event.ctrlKey || event.metaKey; - // +1 day on ctrl or command +right - if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? - +$.datepicker._get(inst, 'stepBigMonths') : - +$.datepicker._get(inst, 'stepMonths')), 'M'); - // next month/year on alt +right + /* Handle keystrokes in the datepicker. + @param event (KeyEvent) the keystroke + @return (boolean) true if not handled, false if handled */ + _keyDown: function(event) { + var self = $.ui.datepicker.getInstance(event.target); + var handled = false; + if (self._div) { + if (event.keyCode == $.ui.keyCode.TAB) { // Close + self.hide(); + } + else if (event.keyCode == $.ui.keyCode.ENTER) { // Select + self.selectDate(self._div.find('a.' + self._get('renderer').highlightedClass)[0]); + handled = true; + } + else { // Command keystrokes + var commands = self._get('commands'); + for (var name in commands) { + var command = commands[name]; + if (command.keystroke.keyCode == event.keyCode && + !!command.keystroke.ctrlKey == (event.ctrlKey || event.metaKey) && + !!command.keystroke.altKey == event.altKey && + !!command.keystroke.shiftKey == event.shiftKey) { + self.performAction(name); + handled = true; break; - case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); - handled = event.ctrlKey || event.metaKey; - break; // +1 week on ctrl or command +down - default: handled = false; + } + } + } + } + else { // Show on 'current' keystroke + var command = self._get('commands').current; + if (command.keystroke.keyCode == event.keyCode && + !!command.keystroke.ctrlKey == (event.ctrlKey || event.metaKey) && + !!command.keystroke.altKey == event.altKey && + !!command.keystroke.shiftKey == event.shiftKey) { + self.show(); + handled = true; } - else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home - $.datepicker._showDatepicker(this); - else { - handled = false; } if (handled) { event.preventDefault(); event.stopPropagation(); } + self._ctrlKey = ((event.keyCode < 48 && event.keyCode != $.ui.keyCode.SPACE) || + event.ctrlKey || event.metaKey); + return !handled; }, - /* Filter entered characters - based on date format. */ - _doKeyPress: function(event) { - var inst = $.datepicker._getInst(event.target); - if ($.datepicker._get(inst, 'constrainInput')) { - var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); - var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); - return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); + /* Filter keystrokes in the datepicker. + @param event (KeyEvent) the keystroke + @return (boolean) true if allowed, false if not allowed */ + _keyPress: function(event) { + var self = $.ui.datepicker.getInstance(event.target); + if (self && self._get('constrainInput')) { + var ch = String.fromCharCode(event.keyCode || event.charCode); + var allowedChars = self._allowedChars(); + return (self._ctrlKey || ch < ' ' || !allowedChars || allowedChars.indexOf(ch) > -1); } + return true; }, - /* Synchronise manual entry and field/alternate field. */ - _doKeyUp: function(event) { - var inst = $.datepicker._getInst(event.target); - if (inst.input.val() != inst.lastVal) { + /* Determine the set of characters allowed by the date format. + @return (string) the set of allowed characters, or null if anything allowed */ + _allowedChars: function() { + var dateFormat = this._get('dateFormat'); + var allowedChars = ''; + var literal = false; + var hasNum = false; + for (var i = 0; i < dateFormat.length; i++) { + var ch = dateFormat.charAt(i); + if (literal) { + if (ch == "'" && dateFormat.charAt(i + 1) != "'") { + literal = false; + } + else { + allowedChars += ch; + } + } + else { + switch (ch) { + case 'd': case 'm': case 'o': case 'w': + allowedChars += (hasNum ? '' : '0123456789'); hasNum = true; break; + case 'y': case '@': case '!': + allowedChars += (hasNum ? '' : '0123456789') + '-'; hasNum = true; break; + case 'J': + allowedChars += (hasNum ? '' : '0123456789') + '-.'; hasNum = true; break; + case 'D': case 'M': case 'Y': + return null; // Accept anything + case "'": + if (dateFormat.charAt(i + 1) == "'") { + allowedChars += "'"; + } + else { + literal = true; + } + break; + default: + allowedChars += ch; + } + } + } + return allowedChars; + }, + + /* Synchronise datepicker with the field. + @param event (KeyEvent) the keystroke + @return (boolean) true if allowed, false if not allowed */ + _keyUp: function(event) { + var self = $.ui.datepicker.getInstance(event.target); + if (self && !self._ctrlKey) { try { - var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), - (inst.input ? inst.input.val() : null), - $.datepicker._getFormatConfig(inst)); - if (date) { // only if valid - $.datepicker._setDateFromField(inst); - $.datepicker._updateAlternate(inst); - $.datepicker._updateDatepicker(inst); + var date = self._extractDate(self.element.val()); + if (date) { + self.setDate(date, null, true); } } catch (event) { - $.datepicker.log(event); + // Ignore } } return true; }, - /* Pop-up the date picker for a given input field. - @param input element - the input field attached to the date picker or - event - if triggered by focus */ - _showDatepicker: function(input) { - input = input.target || input; - if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger - input = $('input', input.parentNode)[0]; - if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here - return; - var inst = $.datepicker._getInst(input); - if ($.datepicker._curInst && $.datepicker._curInst != inst) { - $.datepicker._curInst.dpDiv.stop(true, true); - } - var beforeShow = $.datepicker._get(inst, 'beforeShow'); - extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); - inst.lastVal = null; - $.datepicker._lastInput = input; - $.datepicker._setDateFromField(inst); - if ($.datepicker._inDialog) // hide cursor - input.value = ''; - if (!$.datepicker._pos) { // position below input - $.datepicker._pos = $.datepicker._findPos(input); - $.datepicker._pos[1] += input.offsetHeight; // add the height - } - var isFixed = false; - $(input).parents().each(function() { - isFixed |= $(this).css('position') == 'fixed'; - return !isFixed; - }); - if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled - $.datepicker._pos[0] -= document.documentElement.scrollLeft; - $.datepicker._pos[1] -= document.documentElement.scrollTop; - } - var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; - $.datepicker._pos = null; - // determine sizing offscreen - inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); - $.datepicker._updateDatepicker(inst); - // fix width for dynamic number of date pickers - // and adjust position before showing - offset = $.datepicker._checkOffset(inst, offset, isFixed); - inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? - 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', - left: offset.left + 'px', top: offset.top + 'px'}); - if (!inst.inline) { - var showAnim = $.datepicker._get(inst, 'showAnim'); - var duration = $.datepicker._get(inst, 'duration'); - var postProcess = function() { - $.datepicker._datepickerShowing = true; - var borders = $.datepicker._getBorders(inst.dpDiv); - inst.dpDiv.find('iframe.ui-datepicker-cover'). // IE6- only - css({left: -borders[0], top: -borders[1], - width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); - }; - inst.dpDiv.zIndex($(input).zIndex()+1); - if ($.effects && $.effects[showAnim]) - inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); - else - inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); - if (!showAnim || !duration) - postProcess(); - if (inst.input.is(':visible') && !inst.input.is(':disabled')) - inst.input.focus(); - $.datepicker._curInst = inst; + /* Clear an input and close a popup datepicker. */ + clear: function() { + this._selectedDate = null; + this.hide(); + if (this._get('selectDefaultDate') && this._get('defaultDate')) { + this.setDate(this._get('defaultDate') || $.ui.datepicker.newDate()); + } + else { + this._updateInput(); } }, - /* Generate the date picker content. */ - _updateDatepicker: function(inst) { - var self = this; - var borders = $.datepicker._getBorders(inst.dpDiv); - inst.dpDiv.empty().append(this._generateHTML(inst)) - .find('iframe.ui-datepicker-cover') // IE6- only - .css({left: -borders[0], top: -borders[1], - width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) - .end() - .find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a') - .bind('mouseout', function(){ - $(this).removeClass('ui-state-hover'); - if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); - if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); - }) - .bind('mouseover', function(){ - if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) { - $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); - $(this).addClass('ui-state-hover'); - if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); - if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); - } - }) - .end() - .find('.' + this._dayOverClass + ' a') - .trigger('mouseover') - .end(); - var numMonths = this._getNumberOfMonths(inst); - var cols = numMonths[1]; - var width = 17; - if (cols > 1) - inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); - else - inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); - inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + - 'Class']('ui-datepicker-multi'); - inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + - 'Class']('ui-datepicker-rtl'); - if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && - inst.input.is(':visible') && !inst.input.is(':disabled')) - inst.input.focus(); + /* Retrieve the selected date(s) for a calendar picker. + @return (Date) the selected date */ + getDate: function() { + return this._selectedDate; }, - /* Retrieve the size of left and top borders for an element. - @param elem (jQuery object) the element of interest - @return (number[2]) the left and top borders */ - _getBorders: function(elem) { - var convert = function(value) { - return {thin: 1, medium: 2, thick: 3}[value] || value; - }; - return [parseFloat(convert(elem.css('border-left-width'))), - parseFloat(convert(elem.css('border-top-width')))]; + /* Set the selected date(s) for a calendar picker. + @param date (Date or number or string or [] of these) the selected date + @param keyUp (boolean, internal) true if coming from keyUp processing + @param setOpt (boolean, internal) true if coming from option processing + @throws error if date is out of allowed range */ + setDate: function(date, keyUp, setOpt) { + var dateFormat = this._get('dateFormat'); + var minDate = this._get('minDate'); + var maxDate = this._get('maxDate'); + var curDate = this._selectedDate; + this._selectedDate = null; + var date = $.ui.datepicker.determineDate(date, null, + curDate, dateFormat, this._getDateSettings()); + if (date) { + if ((minDate && date.getTime() < minDate.getTime()) || + (maxDate && date.getTime() > maxDate.getTime())) { + throw 'Date is out of allowed range'; + } + this._selectedDate = date; + } + this._prevDate = (this._drawDate ? $.ui.datepicker.newDate(this._drawDate) : null); + this._drawDate = this._checkMinMax(this._selectedDate || + this._get('defaultDate') || $.ui.datepicker.newDate()); + if (!setOpt) { + this._update(); + this._updateInput(keyUp); + } }, - /* Check positioning to remain on screen. */ - _checkOffset: function(inst, offset, isFixed) { - var dpWidth = inst.dpDiv.outerWidth(); - var dpHeight = inst.dpDiv.outerHeight(); - var inputWidth = inst.input ? inst.input.outerWidth() : 0; - var inputHeight = inst.input ? inst.input.outerHeight() : 0; - var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); - var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); + /* Perform a named action for a calendar picker. + @param action (string) the name of the action */ + performAction: function(action) { + if (!this.isDisabled()) { + var commands = this._get('commands'); + if (commands[action] && commands[action].enabled.apply(this.element[0], [this])) { + commands[action].action.apply(this.element[0], [this]); + } + } + }, - offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); - offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; - offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + /* Set the currently shown month, defaulting to today's. + @param year (number) the year to show (optional) + @param month (number) the month to show (1-12) (optional) + @param day (number) the day to show (optional) */ + showMonth: function(year, month, day) { + if (day != null || this._drawDate.getFullYear() != year || + this._drawDate.getMonth() + 1 != month) { + this._prevDate = $.ui.datepicker.newDate(this._drawDate); + var show = this._checkMinMax((year != null ? + $.ui.datepicker.newDate(year, month, 1) : $.ui.datepicker.newDate()), self); + this._drawDate = $.ui.datepicker.newDate(show.getFullYear(), show.getMonth() + 1, + (day != null ? day : Math.min(this._drawDate.getDate(), + $.ui.datepicker.daysInMonth(show.getFullYear(), show.getMonth() + 1)))); + this._update(); + } + }, - // now check if datepicker is showing outside window viewport - move to a better place if so. - offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? - Math.abs(offset.left + dpWidth - viewWidth) : 0); - offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? - Math.abs(dpHeight + inputHeight) : 0); + /* Adjust the currently shown month. + @param offset (number) the number of months to change by */ + changeMonth: function(offset) { + var date = this._checkMinMax($.ui.datepicker.add( + $.ui.datepicker.newDate(this._drawDate), offset, 'm')); + this.showMonth(date.getFullYear(), date.getMonth() + 1, date.getDate()); + }, - return offset; + /* Adjust the currently shown day. + @param offset (number) the number of days to change by */ + changeDay: function(offset) { + var date = $.ui.datepicker.add($.ui.datepicker.newDate(this._drawDate), offset, 'd'); + this.showMonth(date.getFullYear(), date.getMonth() + 1, date.getDate()); }, - /* Find an object's position on the screen. */ - _findPos: function(obj) { - var inst = this._getInst(obj); - var isRTL = this._get(inst, 'isRTL'); - while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) { - obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; - } - var position = $(obj).offset(); - return [position.left, position.top]; + /* Restrict a date to the minimum/maximum specified. + @param date (Date) the date to check + @return (Date) the restricted date */ + _checkMinMax: function(date) { + if (!date) { + return date; + } + var minDate = this._get('minDate'); + var maxDate = this._get('maxDate'); + date = (minDate && date.getTime() < minDate.getTime() ? $.ui.datepicker.newDate(minDate) : date); + date = (maxDate && date.getTime() > maxDate.getTime() ? $.ui.datepicker.newDate(maxDate) : date); + return date; }, - /* Hide the date picker from view. - @param input element - the input field attached to the date picker */ - _hideDatepicker: function(input) { - var inst = this._curInst; - if (!inst || (input && inst != $.data(input, PROP_NAME))) - return; - if (this._datepickerShowing) { - var showAnim = this._get(inst, 'showAnim'); - var duration = this._get(inst, 'duration'); - var postProcess = function() { - $.datepicker._tidyDialog(inst); - this._curInst = null; - }; - if ($.effects && $.effects[showAnim]) - inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); - else - inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : - (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); - if (!showAnim) - postProcess(); - var onClose = this._get(inst, 'onClose'); - if (onClose) - onClose.apply((inst.input ? inst.input[0] : null), - [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback - this._datepickerShowing = false; - this._lastInput = null; - if (this._inDialog) { - this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); - if ($.blockUI) { - $.unblockUI(); - $('body').append(this.dpDiv); - } - } - this._inDialog = false; + /* Retrieve the date associated with an entry in the datepicker. + @param elem (element) the selected datepicker element + @return (Date) the corresponding date, or null */ + retrieveDate: function(elem) { + return $.ui.datepicker.newDate(parseInt(elem.className.replace(/^.*dp(\d+).*$/, '$1'), 10)); + }, + + /* Select a date for this datepicker. + @param elem (element) the selected datepicker element */ + selectDate: function(elem) { + if (!this.isDisabled()) { + this._selectedDate = this.retrieveDate(elem); + this._updateInput(); + (this._inline ? this._update() : this.hide()); } }, - /* Tidy up after a dialog display. */ - _tidyDialog: function(inst) { - inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); + /* Generate the datepicker content for this control. + @return (jQuery) the datepicker content */ + _generateContent: function() { + var renderer = this._get('renderer'); + var dateSettings = this._getDateSettings(); + var monthsToShow = this._get('monthsToShow'); + monthsToShow = ($.isArray(monthsToShow) ? monthsToShow : [1, monthsToShow]); + this._drawDate = this._checkMinMax( + this._drawDate || this._get('defaultDate') || $.ui.datepicker.newDate(), self); + var drawDate = $.ui.datepicker.newDate(this._drawDate); + drawDate.setMonth(drawDate.getMonth() - this._get('monthsOffset')); + // Generate months + var monthRows = ''; + for (var row = 0; row < monthsToShow[0]; row++) { + var months = ''; + for (var col = 0; col < monthsToShow[1]; col++) { + months += this._generateMonth(drawDate.getFullYear(), + drawDate.getMonth(), renderer, dateSettings, (row == 0 && col == 0)); + drawDate.setMonth(drawDate.getMonth() + 1); + } + monthRows += this._prepare(renderer.monthRow).replace(/\{months\}/, months); + } + var picker = this._prepare(renderer.picker).replace(/\{months\}/, monthRows). + replace(/\{weekHeader\}/g, this._generateDayHeaders(renderer)) + + ($.browser.msie && parseInt($.browser.version, 10) < 7 && !self.inline ? + '' : ''); + // Add commands + var commands = this._get('commands'); + var asDateFormat = this._get('commandsAsDateFormat'); + var self = this; + var addCommand = function(type, open, close, name, classes) { + if (picker.indexOf('{' + type + ':' + name + '}') == -1) { + return; + } + var command = commands[name]; + var date = (asDateFormat ? command.date.apply(self.element[0], [self]) : null); + picker = picker.replace(new RegExp('\\{' + type + ':' + name + '\\}', 'g'), + '<' + open + (command.status ? ' title="' + self._get(command.status) + '"' : '') + + ' class="' + renderer.commandClass + ' ' + + renderer.commandClass + '-' + name + ' ' + classes + + (command.enabled(self) ? '' : ' ' + renderer.disabledClass) + '">' + + (date ? $.ui.datepicker.formatDate(self._get(command.text), date, dateSettings) : + self._get(command.text)) + ''); + }; + for (var name in commands) { + addCommand('button', 'button type="button"', 'button', name, + renderer.commandButtonClass); + addCommand('link', 'a href="javascript:void(0)"', 'a', name, + renderer.commandLinkClass); + } + picker = $(picker); + // Add calendar behaviour + picker.find(renderer.daySelector + ' a').hover( // Track days + function() { $(this).addClass(renderer.highlightedClass); }, + function() { + (self._inline ? $(this).parents('.' + self.widgetBaseClass) : self._div). + find(renderer.daySelector + ' a'). + removeClass(renderer.highlightedClass); + }). + click(function() { // Select date + self.selectDate(this); + }).end(). + find('select.' + this.widgetBaseClass + monthYearClass + + ':not(.' + this.widgetBaseClass + anyYearClass + ')'). + change(function() { // Month/year + var monthYear = $(this).val().split('/'); + self.showMonth(parseInt(monthYear[1], 10), parseInt(monthYear[0], 10)); + }).end(). + find('select.' + this.widgetBaseClass + anyYearClass).click(function() { // Any year + $(this).next('input').css({left: this.offsetLeft, top: this.offsetTop, + width: this.offsetWidth, height: this.offsetHeight}).show().focus(); + }).end(). + find('input.' + this.widgetBaseClass + monthYearClass).change(function() { // Any year entry + var year = parseInt($(this).val(), 10); + year = (isNaN(year) ? self._drawDate.getFullYear() : year); + self.showMonth(year, self._drawDate.getMonth() + 1, self._drawDate.getDate()); + }).keydown(function(event) { // Any year escape + if (event.keyCode == $.ui.keyCode.ESCAPE) { + $(event.target).hide(); + self.element.focus(); + } + }); + // Add command behaviour + picker.find('.' + renderer.commandClass).click(function() { + var action = this.className.replace( + new RegExp('^.*' + renderer.commandClass + '-([^ ]+).*$'), '$1'); + self.performAction(action); + }); + // Add classes + if (this._get('isRTL')) { + picker.addClass(renderer.rtlClass); + } + if (monthsToShow[0] * monthsToShow[1] > 1) { + picker.addClass(renderer.multiClass); + } + var pickerClass = this._get('pickerClass'); + if (pickerClass) { + picker.addClass(pickerClass); + } + // Resize + $('body').append(picker); + picker.width(monthsToShow[1] * picker.find(renderer.monthSelector).outerWidth()); + // Pre-show customisation + var onShow = this._get('onShow'); + if ($.isFunction(onShow)) { + onShow.apply(this.element[0], [picker, this]); + } + return picker; }, - /* Close date picker if clicked elsewhere. */ - _checkExternalClick: function(event) { - if (!$.datepicker._curInst) - return; - var $target = $(event.target); - if ($target[0].id != $.datepicker._mainDivId && - $target.parents('#' + $.datepicker._mainDivId).length == 0 && - !$target.hasClass($.datepicker.markerClassName) && - !$target.hasClass($.datepicker._triggerClass) && - $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) - $.datepicker._hideDatepicker(); + /* Generate the content for a single month. + @param year (number) the year to generate + @param month (number) the month to generate (0-11) + @param renderer (object) the rendering templates + @param dateSettings (object) the localised settings + @param first (boolean) true if first of multiple months + @return (string) the month content */ + _generateMonth: function(year, month, renderer, dateSettings, first) { + var daysInMonth = $.ui.datepicker.daysInMonth(year, month + 1); + var monthsToShow = this._get('monthsToShow'); + monthsToShow = ($.isArray(monthsToShow) ? monthsToShow : [1, monthsToShow]); + var fixedWeeks = this._get('fixedWeeks') || (monthsToShow[0] * monthsToShow[1] > 1); + var firstDay = this._get('firstDay'); + var leadDays = ($.ui.datepicker.newDate(year, month + 1, 1).getDay() - firstDay + 7) % 7; + var numWeeks = (fixedWeeks ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); + var showOtherMonths = this._get('showOtherMonths'); + var selectOtherMonths = this._get('selectOtherMonths') && showOtherMonths; + var dayStatus = this._get('dayStatus'); + var minDate = this._get('minDate'); + var maxDate = this._get('maxDate'); + var showWeeks = renderer.week.indexOf('{weekOfYear}') > -1; + var calculateWeek = this._get('calculateWeek') || $.ui.datepicker.iso8601Week; + var onDate = this._get('onDate'); + onDate = ($.isFunction(onDate) ? onDate : null); + var today = $.ui.datepicker.newDate(); + var drawDate = $.ui.datepicker.newDate(year, month + 1, 1); + drawDate.setDate(drawDate.getDate() - leadDays - + (fixedWeeks && drawDate.getDay() == firstDay ? 7 : 0)); + // Generate weeks + var weeks = ''; + for (var week = 0; week < numWeeks; week++) { + var weekOfYear = (!showWeeks || !calculateWeek ? '' : + '' + calculateWeek(drawDate) + ''); + var days = ''; + for (var day = 0; day < 7; day++) { + var selected = (this._selectedDate && this._selectedDate.getTime() == drawDate.getTime()); + var dateInfo = (!onDate ? {} : + onDate.apply(this.element[0], [drawDate, drawDate.getMonth() == month])); + var selectable = (dateInfo.selectable == null || dateInfo.selectable) && + (selectOtherMonths || drawDate.getMonth() == month) && + (!minDate || drawDate.getTime() >= minDate.getTime()) && + (!maxDate || drawDate.getTime() <= maxDate.getTime()); + days += this._prepare(renderer.day).replace(/\{day\}/g, + (selectable ? '' + + (showOtherMonths || drawDate.getMonth() == month ? + dateInfo.content || drawDate.getDate() : ' ') + + (selectable ? '' : '')); + drawDate.setDate(drawDate.getDate() + 1); + } + weeks += this._prepare(renderer.week).replace(/\{days\}/g, days). + replace(/\{weekOfYear\}/g, weekOfYear); + } + var monthHeader = this._prepare(renderer.month).match(/\{monthHeader(:[^\}]+)?\}/); + monthHeader = (monthHeader[0].length <= 13 ? 'MM yyyy' : + monthHeader[0].substring(13, monthHeader[0].length - 1)); + monthHeader = (first && this._get('changeMonth') ? this._generateMonthSelection( + year, month, minDate, maxDate, monthHeader, dateSettings) : + $.ui.datepicker.formatDate(monthHeader, + $.ui.datepicker.newDate(year, month + 1, 1), dateSettings)); + var weekHeader = this._prepare(renderer.weekHeader). + replace(/\{days\}/g, this._generateDayHeaders(renderer)); + return this._prepare(renderer.month).replace(/\{monthHeader(:[^\}]+)?\}/g, monthHeader). + replace(/\{weekHeader\}/g, weekHeader).replace(/\{weeks\}/g, weeks); }, - /* Adjust one of the date sub-fields. */ - _adjustDate: function(id, offset, period) { - var target = $(id); - var inst = this._getInst(target[0]); - if (this._isDisabledDatepicker(target[0])) { - return; + /* Generate the HTML for the day headers. + @param renderer (object) the rendering templates + @return (string) a week's worth of day headers */ + _generateDayHeaders: function(renderer) { + var firstDay = this._get('firstDay'); + var dayNames = this._get('dayNames'); + var dayNamesMin = this._get('dayNamesMin'); + var header = ''; + for (var day = 0; day < 7; day++) { + var dow = (day + firstDay) % 7; + header += this._prepare(renderer.dayHeader).replace(/\{day\}/g, + '' + dayNamesMin[dow] + ''); } - this._adjustInstDate(inst, offset + - (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning - period); - this._updateDatepicker(inst); + return header; }, - /* Action for current link. */ - _gotoToday: function(id) { - var target = $(id); - var inst = this._getInst(target[0]); - if (this._get(inst, 'gotoCurrent') && inst.currentDay) { - inst.selectedDay = inst.currentDay; - inst.drawMonth = inst.selectedMonth = inst.currentMonth; - inst.drawYear = inst.selectedYear = inst.currentYear; + /* Generate selection controls for month/year. + @param year (number) the year to generate + @param month (number) the month to generate (0-11) + @param minDate (CDate) the minimum date allowed + @param maxDate (CDate) the maximum date allowed + @param monthHeader (string) the month/year format + @param dateSettings (object) the localised settings + @return (string) the month selection content */ + _generateMonthSelection: function(year, month, minDate, maxDate, monthHeader, dateSettings) { + // Months + var monthNames = this._get('monthNames' + (monthHeader.match(/mm/i) ? '' : 'Short')); + var html = monthHeader.replace(/m+/i, '\\x2E').replace(/y+/i, '\\x2F'); + var selector = ''; + html = html.replace(/\\x2E/, selector); + // Years + var yearRange = this._get('yearRange'); + if (yearRange == 'any') { + selector = '' + + ''; } else { - var date = new Date(); - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); + yearRange = yearRange.split(':'); + if (yearRange.length == 1) { + yearRange.push(yearRange[0]); + } + var todayYear = new Date().getFullYear(); + var start = (yearRange[0].match('c[+-].*') ? year + parseInt(yearRange[0].substring(1), 10) : + ((yearRange[0].match('[+-].*') ? todayYear : 0) + parseInt(yearRange[0] || todayYear, 10))); + var end = (yearRange[1].match('c[+-].*') ? year + parseInt(yearRange[1].substring(1), 10) : + ((yearRange[1].match('[+-].*') ? todayYear : 0) + parseInt(yearRange[1] || todayYear, 10))); + selector = ''; } - this._notifyChange(inst); - this._adjustDate(target); + html = html.replace(/\\x2F/, selector); + return html; }, - /* Action for selecting a new month/year. */ - _selectMonthYear: function(id, select, period) { - var target = $(id); - var inst = this._getInst(target[0]); - inst._selectingMonthYear = false; - inst['selected' + (period == 'M' ? 'Month' : 'Year')] = - inst['draw' + (period == 'M' ? 'Month' : 'Year')] = - parseInt(select.options[select.selectedIndex].value,10); - this._notifyChange(inst); - this._adjustDate(target); + /* Prepare a render template for use. + Exclude popup/inline sections that are not applicable. + Localise text of the form: {l10n:name}. + @param text (string) the text to localise + @return (string) the localised text */ + _prepare: function(text) { + var replaceSection = function(type, retain) { + while (true) { + var start = text.indexOf('{' + type + ':start}'); + if (start == -1) { + return; + } + var end = text.substring(start).indexOf('{' + type + ':end}'); + if (end > -1) { + text = text.substring(0, start) + + (retain ? text.substr(start + type.length + 8, end - type.length - 8) : '') + + text.substring(start + end + type.length + 6); + } + } + }; + replaceSection('inline', this._inline); + replaceSection('popup', !this._inline); + var pattern = /\{l10n:([^\}]+)\}/; + var matches = null; + while (matches = pattern.exec(text)) { + text = text.replace(matches[0], this._get(matches[1])); + } + return text; }, - /* Restore input focus after not changing month/year. */ - _clickMonthYear: function(id) { - var target = $(id); - var inst = this._getInst(target[0]); - if (inst.input && inst._selectingMonthYear && !$.browser.msie) - inst.input.focus(); - inst._selectingMonthYear = !inst._selectingMonthYear; - }, + /* Retrieve the formatting settings for this instance. + @return (object) the formatting settings */ + _getDateSettings: function() { + return {dayNamesShort: this._get('dayNamesShort'), dayNames: this._get('dayNames'), + monthNamesShort: this._get('monthNamesShort'), monthNames: this._get('monthNames'), + calculateWeek: this._get('calculateWeek'), shortYearCutoff: this._get('shortYearCutoff')}; + } +}); - /* Action for selecting a day. */ - _selectDay: function(id, month, year, td) { - var target = $(id); - if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { - return; +$.extend($.ui.datepicker, { + version: '@VERSION', + eventPrefix: 'datepicker', + getter: 'getDate,isDisabled', + defaultRenderer: defaultRenderer, + buttonsRenderer: buttonsRenderer, + defaultCommands: defaultCommands, + defaults: { // Global defaults + showOnFocus: true, // True for popup on focus, false for not + showTrigger: null, // Element to be cloned for a trigger, null for none + showAnim: 'show', // Name of jQuery animation for popup, '' for no animation + showOptions: {}, // Options for enhanced animations + showSpeed: 'normal', // Duration of display/closure + popupContainer: null, // The element to which a popup calendar is added, null for body + myPosition: '', // Alignment of popup - source - default 'left top' + atPosition: '', // Alignment of popup - target - default 'left bottom' + fixedWeeks: false, // True to always show 6 weeks, false to only show as many as are needed + calculateWeek: null, // Override week of the year calculation, defaults to ISO 8601 + monthsToShow: 1, // How many months to show, cols or [rows, cols] + monthsOffset: 0, // How many months to offset the primary month by + monthsToStep: 1, // How many months to move when prev/next clicked + monthsToJump: 12, // How many months to move when large prev/next clicked + changeMonth: false, // True to change month/year via drop-down, false for navigation only + yearRange: 'c-10:c+10', // Range of years to show in drop-down: 'any' for direct text entry + // or 'start:end', where start/end are '+-nn' for relative to today + // or 'c+-nn' for relative to the currently selected date + // or 'nnnn' for an absolute year + shortYearCutoff: '+10', // Cutoff point for two digit years in the current century - + // either absolute number (0-99) or string offset from current year + showOtherMonths: false, // True to show dates from other months, false to not show them + selectOtherMonths: false, // True to allow selection of dates from other months too + defaultDate: null, // Date to show if no other selected + selectDefaultDate: false, // True to pre-select the default date if no other is chosen + minDate: null, // The minimum selectable date + maxDate: null, // The maximum selectable date + dateFormat: null, // Format for dates, defaults to calendar setting if null + autoSize: false, // True to size the input field according to the date format + onDate: null, // Callback as a date is added to the datepicker + onShow: null, // Callback just before a datepicker is shown + changeMonthYear: null, // Event when changing the month displayed + select: null, // Event when a date is selected + close: null, // Event when a popup datepicker is closed + altField: null, // Alternate field to update in synch with the datepicker + altFormat: null, // Date format for alternate field, defaults to dateFormat + constrainInput: true, // True to constrain typed input to dateFormat allowed characters + commandsAsDateFormat: false, // True to apply formatDate to the command texts + commands: defaultCommands // Command actions that may be added to a layout by name + }, + + regional: { // Localisations + '': { // English + renderer: defaultRenderer, // The rendering templates + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], + dateFormat: 'mm/dd/yyyy', // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + prevText: '<Prev', // Text for the previous month command + prevStatus: 'Show the previous month', // Status text for the previous month command + prevJumpText: '<<', // Text for the previous year command + prevJumpStatus: 'Show the previous year', // Status text for the previous year command + nextText: 'Next>', // Text for the next month command + nextStatus: 'Show the next month', // Status text for the next month command + nextJumpText: '>>', // Text for the next year command + nextJumpStatus: 'Show the next year', // Status text for the next year command + currentText: 'Current', // Text for the current month command + currentStatus: 'Show the current month', // Status text for the current month command + todayText: 'Today', // Text for the today's month command + todayStatus: 'Show today\'s month', // Status text for the today's month command + clearText: 'Clear', // Text for the clear command + clearStatus: 'Clear all the dates', // Status text for the clear command + closeText: 'Close', // Text for the close command + closeStatus: 'Close the datepicker', // Status text for the close command + yearStatus: 'Change the year', // Status text for year selection + monthStatus: 'Change the month', // Status text for month selection + weekText: 'Wk', // Text for week of the year column header + weekStatus: 'Week of the year', // Status text for week of the year column header + dayStatus: 'Select DD, M d, yyyy', // Status text for selectable days + defaultStatus: 'Select a date', // Status text shown by default + isRTL: false // True if language is right-to-left } - var inst = this._getInst(target[0]); - inst.selectedDay = inst.currentDay = $('a', td).html(); - inst.selectedMonth = inst.currentMonth = month; - inst.selectedYear = inst.currentYear = year; - this._selectDate(id, this._formatDate(inst, - inst.currentDay, inst.currentMonth, inst.currentYear)); }, - /* Erase the input field and hide the date picker. */ - _clearDate: function(id) { - var target = $(id); - var inst = this._getInst(target[0]); - this._selectDate(target, ''); + /* Retrieve the datepicker instance for a field. + @param target (element) the attached control + @return (ui.datepicker) the connect datepicker, or null if none */ + getInstance: function(target) { + return $.data(target, this.widgetName).datepicker; }, - /* Update the input field with the selected date. */ - _selectDate: function(id, dateStr) { - var target = $(id); - var inst = this._getInst(target[0]); - dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); - if (inst.input) - inst.input.val(dateStr); - this._updateAlternate(inst); - var onSelect = this._get(inst, 'onSelect'); - if (onSelect) - onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback - else if (inst.input) - inst.input.trigger('change'); // fire the change event - if (inst.inline) - this._updateDatepicker(inst); - else { - this._hideDatepicker(); - this._lastInput = inst.input[0]; - if (typeof(inst.input[0]) != 'object') - inst.input.focus(); // restore focus - this._lastInput = null; - } + /* Create a new normalised date. + @param year (Date) date to clone (null for today) or + (number) timestamp or + (number) year for date + @param month (number, optional) month for date (1-12) + @param day (number, optional) day for date + @return (Date) the new date */ + newDate: function(year, month, day) { + return this.normaliseDate(year == null ? new Date() : + (typeof year != 'number' ? new Date(year.getTime()) : + (month != null ? new Date(year, month - 1, day) : new Date(year)))); }, - /* Update any alternate field to synchronise with the main field. */ - _updateAlternate: function(inst) { - var altField = this._get(inst, 'altField'); - if (altField) { // update alternate field too - var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); - var date = this._getDate(inst); - var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); - $(altField).each(function() { $(this).val(dateStr); }); - } + /* Clear time values and handle switch to/from daylight saving. + Hours may be non-zero on daylight saving cut-over: + > 12 when midnight changeover, but then cannot generate + midnight datetime, so jump to 1AM, otherwise reset. + @param date (Date) the date to check + @return (Date) the corrected date */ + normaliseDate: function(date) { + if (!date) return null; + date.setMilliseconds(0); + date.setSeconds(0); + date.setMinutes(0); + date.setHours(0); + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; }, - /* Set as beforeShowDay function to prevent selection of weekends. - @param date Date - the date to customise - @return [boolean, string] - is this date selectable?, what is its CSS class? */ - noWeekends: function(date) { - var day = date.getDay(); - return [(day > 0 && day < 6), '']; + /* Find the number of days in a given month. + @param year (Date) the date to inspect or + (number) the year to inspect + @param month (number, optional) the month to inspect (1-12) + @return (number) the number of days in the given month */ + daysInMonth: function(year, month) { + if (year.getFullYear) { + month = year.getMonth() + 1; + year = year.getFullYear(); + } + return 32 - new Date(year, month - 1, 32).getDate(); }, - /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. - @param date Date - the date to get the week for - @return number - the number of the week within the year that contains this date */ - iso8601Week: function(date) { - var checkDate = new Date(date.getTime()); + /* Calculate the week of the year, according to ISO 8601. + @param year (Date) the date to calculate for or + (number) the year to calculate for + @param month (number, optional) the month to calculate for (1-12) + @param day (number, optional) the day to calculate for + @return (number) the corresponding week of the year (1-53) */ + iso8601Week: function(year, month, day) { + var checkDate = (year.getFullYear ? + $.ui.datepicker.newDate(year) : $.ui.datepicker.newDate(year, month, day)); // Find Thursday of this week starting on Monday - checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); - var time = checkDate.getTime(); - checkDate.setMonth(0); // Compare with Jan 1 - checkDate.setDate(1); - return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + $.ui.datepicker.add(checkDate, 4 - (checkDate.getDay() || 7), 'd'); + return Math.floor(($.ui.datepicker.dayOfYear(checkDate) - 1) / 7) + 1; }, - /* Parse a string value into a date object. - See formatDate below for the possible formats. + /* Calculate the day of the year. + @param year (Date) the date to calculate for or + (number) the year to calculate for + @param month (number, optional) the month to calculate for (1-12) + @param day (number, optional) the day to calculate for + @return (number) its day of the year (1-366) */ + dayOfYear: function(year, month, day) { + var date = (year.getFullYear ? year : new Date(year, month - 1, day)); + return Math.floor((date.getTime() - + this.newDate(date.getFullYear(), 1, 0).getTime()) / 86400000); + }, + + /* Add a number of periods to a date. + @param date (Date) the starting date + @param offset (number) the number of periods + @param period (string) the type of period (d|w|m|y) + @return (Date) the updated date */ + add: function(date, offset, period) { + if (!date) + return null; + period = period.toLowerCase(); + var year = date.getFullYear(); + var month = date.getMonth(); + var day = date.getDate(); + if (period == 'd') { + day += offset; + } + else if (period == 'w') { + day += (offset * 7); + } + else if (period == 'm') { + month += offset; + } + else if (period == 'y') { + year += offset; + } + date.setTime(this.normaliseDate(new Date(year, month, (period == 'd' || period == 'w' ? + day : Math.min(day, this.daysInMonth(year, month + 1))))).getTime()); + return date; + }, + + // Predefined date formats + ATOM: 'yyyy-mm-dd', // RFC 3339/ISO 8601 + COOKIE: 'D, dd M yyyy', + FULL: 'DD, MM d, yyyy', + ISO_8601: 'yyyy-mm-dd', + JULIAN: 'J', + RFC_822: 'D, d M yy', + RFC_850: 'DD, dd-M-yy', + RFC_1036: 'D, d M yy', + RFC_1123: 'D, d M yyyy', + RFC_2822: 'D, d M yyyy', + RSS: 'D, d M yy', // RFC 822 + TICKS: '!', + TIMESTAMP: '@', + W3C: 'yyyy-mm-dd', // ISO 8601 - @param format string - the expected format of the date - @param value string - the date in the above format - @param settings Object - attributes include: - shortYearCutoff number - the cutoff year for determining the century (optional) - dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) - dayNames string[7] - names of the days from Sunday (optional) - monthNamesShort string[12] - abbreviated names of the months (optional) - monthNames string[12] - names of the months (optional) - @return Date - the extracted date value or null if value is blank */ - parseDate: function (format, value, settings) { - if (format == null || value == null) + /* Format a date object into a string value. + The format can be combinations of the following: + d - day of month (no leading zero) + dd - day of month (two digit) + o - day of year (no leading zeros) + oo - day of year (three digit) + D - day name short + DD - day name long + w - week of year (no leading zero) + ww - week of year (two digit) + m - month of year (no leading zero) + mm - month of year (two digit) + M - month name short + MM - month name long + yy - year (two digit) + yyyy - year (four digit) + @ - Unix timestamp (secs since 01/01/1970) + ! - Windows ticks (100ns since 01/01/0001) + '...' - literal text + '' - single quote + @param format (string) the desired format of the date + @param date (Date) the date value to format + @param settings (object) attributes include: + dayNamesShort (string[]) abbreviated names of the days from Sunday (optional) + dayNames (string[]) names of the days from Sunday (optional) + monthNamesShort (string[]) abbreviated names of the months (optional) + monthNames (string[]) names of the months (optional) + calculateWeek (function) function that determines week of the year (optional) + @return (string) the date in the above format */ + formatDate: function(format, date, settings) { + if (!date) { + return ''; + } + settings = settings || {}; + var dayNamesShort = settings.dayNamesShort || $.ui.datepicker.defaults.dayNamesShort; + var dayNames = settings.dayNames || $.ui.datepicker.defaults.dayNames; + var monthNamesShort = settings.monthNamesShort || $.ui.datepicker.defaults.monthNamesShort; + var monthNames = settings.monthNames || $.ui.datepicker.defaults.monthNames; + var calculateWeek = settings.calculateWeek || $.ui.datepicker.defaults.calculateWeek || + $.ui.datepicker.iso8601Week; + // Check whether a format character is doubled + var doubled = function(match, step) { + var matches = 1; + while (iFormat + matches < format.length && format.charAt(iFormat + matches) == match) { + matches++; + } + iFormat += matches - 1; + return Math.floor(matches / (step || 1)) > 1; + }; + // Format a number, with leading zeroes if necessary + var formatNumber = function(match, value, len, step) { + var num = '' + value; + if (doubled(match, step)) { + while (num.length < len) { + num = '0' + num; + } + } + return num; + }; + // Format a name, short or long as requested + var formatName = function(match, value, shortNames, longNames) { + return (doubled(match) ? longNames[value] : shortNames[value]); + }; + var output = ''; + var literal = false; + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) == "'" && !doubled("'")) { + literal = false; + } + else { + output += format.charAt(iFormat); + } + } + else { + switch (format.charAt(iFormat)) { + case 'd': output += formatNumber('d', date.getDate(), 2); break; + case 'D': output += formatName('D', date.getDay(), dayNamesShort, dayNames); break; + case 'o': output += formatNumber('o', $.ui.datepicker.dayOfYear(date), 3); break; + case 'w': output += formatNumber('w', calculateWeek(date), 2); break; + case 'm': output += formatNumber('m', date.getMonth() + 1, 2); break; + case 'M': output += formatName('M', date.getMonth(), monthNamesShort, monthNames); break; + case 'y': + output += (doubled('y', 2) ? date.getFullYear() : + (date.getFullYear() % 100 < 10 ? '0' : '') + date.getFullYear() % 100); + break; + case '@': output += Math.floor(date.getTime() / 1000); break; + case '!': output += date.getTime() * 10000 + ticksTo1970; break; + case "'": + if (doubled("'")) { + output += "'"; + } + else { + literal = true; + } + break; + default: + output += format.charAt(iFormat); + } + } + } + return output; + }, + + /* Parse a string value into a date object. + See formatDate for the possible formats, plus: + * - ignore rest of string + @param format (string) the expected format of the date + @param value (string) the date in the above format + @param settings (object) attributes include: + shortYearCutoff (number) the cutoff year for determining the century (optional) + dayNamesShort (string[]) abbreviated names of the days from Sunday (optional) + dayNames (string[]) names of the days from Sunday (optional) + monthNamesShort (string[]) abbreviated names of the months (optional) + monthNames (string[]) names of the months (optional) + @return (Date) the extracted date value or null if value is blank + @throws errors if the format and/or value are missing, if the value doesn't match the format, + or if the date is invalid */ + parseDate: function(format, value, settings) { + if (!format || value == null) { throw 'Invalid arguments'; + } value = (typeof value == 'object' ? value.toString() : value + ''); - if (value == '') + if (value == '') { return null; - var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; - var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; - var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; - var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; - var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + } + settings = settings || {}; + var shortYearCutoff = settings.shortYearCutoff || $.ui.datepicker.defaults.shortYearCutoff; + var shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + var dayNamesShort = settings.dayNamesShort || $.ui.datepicker.defaults.dayNamesShort; + var dayNames = settings.dayNames || $.ui.datepicker.defaults.dayNames; + var monthNamesShort = settings.monthNamesShort || $.ui.datepicker.defaults.monthNamesShort; + var monthNames = settings.monthNames || $.ui.datepicker.defaults.monthNames; var year = -1; var month = -1; var day = -1; var doy = -1; + var shortYear = false; var literal = false; // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; + var doubled = function(match, step) { + var matches = 1; + while (iFormat + matches < format.length && format.charAt(iFormat + matches) == match) { + matches++; + } + iFormat += matches - 1; + return Math.floor(matches / (step || 1)) > 1; }; // Extract a number from the string value - var getNumber = function(match) { - lookAhead(match); - var size = (match == '@' ? 14 : (match == '!' ? 20 : - (match == 'y' ? 4 : (match == 'o' ? 3 : 2)))); - var digits = new RegExp('^\\d{1,' + size + '}'); + var getNumber = function(match, step) { + doubled(match, step); + var size = [2, 3, 4, 11, 20]['oy@!'.indexOf(match) + 1]; + var digits = new RegExp('^-?\\d{1,' + size + '}'); var num = value.substring(iValue).match(digits); - if (!num) - throw 'Missing number at position ' + iValue; + if (!num) { + throw 'Missing number at position {0}'.replace(/\{0\}/, iValue); + } iValue += num[0].length; return parseInt(num[0], 10); }; // Extract a name from the string value and convert to an index - var getName = function(match, shortNames, longNames) { - var names = (lookAhead(match) ? longNames : shortNames); + var calendar = this; + var getName = function(match, shortNames, longNames, step) { + var names = (doubled(match, step) ? longNames : shortNames); for (var i = 0; i < names.length; i++) { if (value.substr(iValue, names[i].length) == names[i]) { iValue += names[i].length; return i + 1; } } - throw 'Unknown name at position ' + iValue; + throw 'Unknown name at position {0}'.replace(/\{0\}/, iValue); }; // Confirm that a literal character matches the string value var checkLiteral = function() { - if (value.charAt(iValue) != format.charAt(iFormat)) - throw 'Unexpected literal at position ' + iValue; + if (value.charAt(iValue) != format.charAt(iFormat)) { + throw 'Unexpected literal at position {0}'.replace(/\{0\}/, iValue); + } iValue++; }; var iValue = 0; for (var iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) + if (literal) { + if (format.charAt(iFormat) == "'" && !doubled("'")) { literal = false; - else + } + else { checkLiteral(); - else + } + } + else { switch (format.charAt(iFormat)) { - case 'd': - day = getNumber('d'); - break; - case 'D': - getName('D', dayNamesShort, dayNames); - break; - case 'o': - doy = getNumber('o'); - break; - case 'm': - month = getNumber('m'); - break; - case 'M': - month = getName('M', monthNamesShort, monthNames); - break; + case 'd': day = getNumber('d'); break; + case 'D': getName('D', dayNamesShort, dayNames); break; + case 'o': doy = getNumber('o'); break; + case 'w': getNumber('w'); break; + case 'm': month = getNumber('m'); break; + case 'M': month = getName('M', monthNamesShort, monthNames); break; case 'y': - year = getNumber('y'); + var iSave = iFormat; + shortYear = !doubled('y', 2); + iFormat = iSave; + year = getNumber('y', 2); break; - case '@': - var date = new Date(getNumber('@')); + case '@': + var date = new Date(getNumber('@') * 1000); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; - case '!': - var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); + case '!': + var date = new Date((getNumber('!') - ticksTo1970) / 10000); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; + case '*': iValue = value.length; break; case "'": - if (lookAhead("'")) + if (doubled("'")) { checkLiteral(); - else + } + else { literal = true; + } break; - default: - checkLiteral(); + default: checkLiteral(); } + } + } + if (iValue < value.length) { + throw 'Additional text found at end'; + } + if (year == -1) { + year = this.today().year(); + } + else if (year < 100 && shortYear) { + year += (shortYearCutoff == -1 ? 1900 : new Date().getFullYear() - + new Date().getFullYear() % 100 - (year <= shortYearCutoff ? 0 : 100)); } - if (year == -1) - year = new Date().getFullYear(); - else if (year < 100) - year += new Date().getFullYear() - new Date().getFullYear() % 100 + - (year <= shortYearCutoff ? 0 : -100); if (doy > -1) { month = 1; day = doy; - do { - var dim = this._getDaysInMonth(year, month - 1); - if (day <= dim) - break; + for (var dim = $.ui.datepicker.daysInMonth(year, month); day > dim; + dim = $.ui.datepicker.daysInMonth(year, month)) { month++; day -= dim; - } while (true); + } + } + var date = $.ui.datepicker.newDate(year, month, day); + if (year != date.getFullYear() || month != date.getMonth() + 1 || day != date.getDate()) { + throw 'Invalid date'; } - var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); - if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) - throw 'Invalid date'; // E.g. 31/02/* return date; }, - /* Standard date formats. */ - ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) - COOKIE: 'D, dd M yy', - ISO_8601: 'yy-mm-dd', - RFC_822: 'D, d M y', - RFC_850: 'DD, dd-M-y', - RFC_1036: 'D, d M y', - RFC_1123: 'D, d M yy', - RFC_2822: 'D, d M yy', - RSS: 'D, d M y', // RFC 822 - TICKS: '!', - TIMESTAMP: '@', - W3C: 'yy-mm-dd', // ISO 8601 - - _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + - Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), - - /* Format a date object into a string value. - The format can be combinations of the following: - d - day of month (no leading zero) - dd - day of month (two digit) - o - day of year (no leading zeros) - oo - day of year (three digit) - D - day name short - DD - day name long - m - month of year (no leading zero) - mm - month of year (two digit) - M - month name short - MM - month name long - y - year (two digit) - yy - year (four digit) - @ - Unix timestamp (ms since 01/01/1970) - ! - Windows ticks (100ns since 01/01/0001) - '...' - literal text - '' - single quote - - @param format string - the desired format of the date - @param date Date - the date value to format - @param settings Object - attributes include: - dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) - dayNames string[7] - names of the days from Sunday (optional) - monthNamesShort string[12] - abbreviated names of the months (optional) - monthNames string[12] - names of the months (optional) - @return string - the date in the above format */ - formatDate: function (format, date, settings) { - if (!date) - return ''; - var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; - var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; - var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; - var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - // Format a number, with leading zero if necessary - var formatNumber = function(match, value, len) { - var num = '' + value; - if (lookAhead(match)) - while (num.length < len) - num = '0' + num; - return num; - }; - // Format a name, short or long as requested - var formatName = function(match, value, shortNames, longNames) { - return (lookAhead(match) ? longNames[value] : shortNames[value]); - }; - var output = ''; - var literal = false; - if (date) - for (var iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - output += format.charAt(iFormat); - else - switch (format.charAt(iFormat)) { - case 'd': - output += formatNumber('d', date.getDate(), 2); - break; - case 'D': - output += formatName('D', date.getDay(), dayNamesShort, dayNames); - break; - case 'o': - output += formatNumber('o', - (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3); - break; - case 'm': - output += formatNumber('m', date.getMonth() + 1, 2); - break; - case 'M': - output += formatName('M', date.getMonth(), monthNamesShort, monthNames); - break; - case 'y': - output += (lookAhead('y') ? date.getFullYear() : - (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); - break; - case '@': - output += date.getTime(); - break; - case '!': - output += date.getTime() * 10000 + this._ticksTo1970; - break; - case "'": - if (lookAhead("'")) - output += "'"; - else - literal = true; - break; - default: - output += format.charAt(iFormat); - } - } - return output; - }, - - /* Extract all possible characters from the date format. */ - _possibleChars: function (format) { - var chars = ''; - var literal = false; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - for (var iFormat = 0; iFormat < format.length; iFormat++) - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - chars += format.charAt(iFormat); - else - switch (format.charAt(iFormat)) { - case 'd': case 'm': case 'y': case '@': - chars += '0123456789'; - break; - case 'D': case 'M': - return null; // Accept anything - case "'": - if (lookAhead("'")) - chars += "'"; - else - literal = true; - break; - default: - chars += format.charAt(iFormat); - } - return chars; - }, - - /* Get a setting value, defaulting if necessary. */ - _get: function(inst, name) { - return inst.settings[name] !== undefined ? - inst.settings[name] : this._defaults[name]; - }, - - /* Parse existing date and initialise date picker. */ - _setDateFromField: function(inst, noDefault) { - if (inst.input.val() == inst.lastVal) { - return; + /* A date may be specified as an exact value or a relative one. + @param dateSpec (Date or number or string) the date as an object or string + in the given format or an offset - numeric days from today, + or string amounts and periods, e.g. '+1m +2w' + @param defaultDate (Date) the date to use if no other supplied, may be null + @param currentDate (Date) the current date as a possible basis for relative dates, + if null today is used (optional) + @param dateFormat (string) the expected date format - see formatDate above (optional) + @param settings (object) attributes include: + shortYearCutoff (number) the cutoff year for determining the century (optional) + dayNamesShort (string[7]) abbreviated names of the days from Sunday (optional) + dayNames (string[7]) names of the days from Sunday (optional) + monthNamesShort (string[12]) abbreviated names of the months (optional) + monthNames (string[12]) names of the months (optional) + @return (Date) the decoded date */ + determineDate: function(dateSpec, defaultDate, currentDate, dateFormat, settings) { + if (currentDate && typeof currentDate != 'object') { + settings = dateFormat; + dateFormat = currentDate; + currentDate = null; } - var dateFormat = this._get(inst, 'dateFormat'); - var dates = inst.lastVal = inst.input ? inst.input.val() : null; - var date, defaultDate; - date = defaultDate = this._getDefaultDate(inst); - var settings = this._getFormatConfig(inst); - try { - date = this.parseDate(dateFormat, dates, settings) || defaultDate; - } catch (event) { - this.log(event); - dates = (noDefault ? '' : dates); - } - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); - inst.currentDay = (dates ? date.getDate() : 0); - inst.currentMonth = (dates ? date.getMonth() : 0); - inst.currentYear = (dates ? date.getFullYear() : 0); - this._adjustInstDate(inst); - }, - - /* Retrieve the default date shown on opening. */ - _getDefaultDate: function(inst) { - return this._restrictMinMax(inst, - this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); - }, - - /* A date may be specified as an exact value or a relative one. */ - _determineDate: function(inst, date, defaultDate) { - var offsetNumeric = function(offset) { - var date = new Date(); - date.setDate(date.getDate() + offset); - return date; - }; + if (typeof dateFormat != 'string') { + settings = dateFormat; + dateFormat = ''; + } + var self = this; var offsetString = function(offset) { try { - return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), - offset, $.datepicker._getFormatConfig(inst)); + return $.ui.datepicker.parseDate(dateFormat, offset, settings); } catch (e) { // Ignore } - var date = (offset.toLowerCase().match(/^c/) ? - $.datepicker._getDate(inst) : null) || new Date(); - var year = date.getFullYear(); - var month = date.getMonth(); - var day = date.getDate(); - var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; + offset = offset.toLowerCase(); + var date = $.ui.datepicker.newDate(offset.match(/^c/) && currentDate ? currentDate : null); + var pattern = /([+-]?[0-9]+)\s*(d|w|m|y)?/g; var matches = pattern.exec(offset); while (matches) { - switch (matches[2] || 'd') { - case 'd' : case 'D' : - day += parseInt(matches[1],10); break; - case 'w' : case 'W' : - day += parseInt(matches[1],10) * 7; break; - case 'm' : case 'M' : - month += parseInt(matches[1],10); - day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); - break; - case 'y': case 'Y' : - year += parseInt(matches[1],10); - day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); - break; - } + date = $.ui.datepicker.add(date, parseInt(matches[1], 10), matches[2] || 'd'); matches = pattern.exec(offset); } - return new Date(year, month, day); + return date; }; - date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) : - (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date))); - date = (date && date.toString() == 'Invalid Date' ? defaultDate : date); - if (date) { - date.setHours(0); - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - } - return this._daylightSavingAdjust(date); + defaultDate = (defaultDate ? $.ui.datepicker.newDate(defaultDate) : null); + dateSpec = (dateSpec == null ? defaultDate : + (typeof dateSpec == 'string' ? offsetString(dateSpec) : (typeof dateSpec == 'number' ? + (isNaN(dateSpec) || dateSpec == Infinity || dateSpec == -Infinity ? defaultDate : + $.ui.datepicker.add($.ui.datepicker.newDate(), dateSpec, 'd')) : dateSpec))); + return dateSpec; }, - /* Handle switch to/from daylight saving. - Hours may be non-zero on daylight saving cut-over: - > 12 when midnight changeover, but then cannot generate - midnight datetime, so jump to 1AM, otherwise reset. - @param date (Date) the date to check - @return (Date) the corrected date */ - _daylightSavingAdjust: function(date) { - if (!date) return null; - date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); - return date; - }, - - /* Set the date(s) directly. */ - _setDate: function(inst, date, noChange) { - var clear = !(date); - var origMonth = inst.selectedMonth; - var origYear = inst.selectedYear; - date = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); - inst.selectedDay = inst.currentDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear(); - if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) - this._notifyChange(inst); - this._adjustInstDate(inst); - if (inst.input) { - inst.input.val(clear ? '' : this._formatDate(inst)); - } - }, - - /* Retrieve the date(s) directly. */ - _getDate: function(inst) { - var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : - this._daylightSavingAdjust(new Date( - inst.currentYear, inst.currentMonth, inst.currentDay))); - return startDate; - }, - - /* Generate the HTML for the current state of the date picker. */ - _generateHTML: function(inst) { - var today = new Date(); - today = this._daylightSavingAdjust( - new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time - var isRTL = this._get(inst, 'isRTL'); - var showButtonPanel = this._get(inst, 'showButtonPanel'); - var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); - var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); - var numMonths = this._getNumberOfMonths(inst); - var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); - var stepMonths = this._get(inst, 'stepMonths'); - var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); - var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : - new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - var drawMonth = inst.drawMonth - showCurrentAtPos; - var drawYear = inst.drawYear; - if (drawMonth < 0) { - drawMonth += 12; - drawYear--; - } - if (maxDate) { - var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), - maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); - maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); - while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { - drawMonth--; - if (drawMonth < 0) { - drawMonth = 11; - drawYear--; - } + /* Apply multiple event functions. + Usage, for example: onShow: multipleEvents(fn1, fn2, ...) + @param fns (function...) the functions to apply */ + multipleEvents: function(fns) { + var funcs = arguments; + return function(args) { + for (var i = 0; i < funcs.length; i++) { + funcs[i].apply(this, arguments); } - } - inst.drawMonth = drawMonth; - inst.drawYear = drawYear; - var prevText = this._get(inst, 'prevText'); - prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, - this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), - this._getFormatConfig(inst))); - var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? - '' + prevText + '' : - (hideIfNoPrevNext ? '' : '' + prevText + '')); - var nextText = this._get(inst, 'nextText'); - nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, - this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), - this._getFormatConfig(inst))); - var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? - '' + nextText + '' : - (hideIfNoPrevNext ? '' : '' + nextText + '')); - var currentText = this._get(inst, 'currentText'); - var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); - currentText = (!navigationAsDateFormat ? currentText : - this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); - var controls = (!inst.inline ? '' : ''); - var buttonPanel = (showButtonPanel) ? '
' + (isRTL ? controls : '') + - (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
' : ''; - var firstDay = parseInt(this._get(inst, 'firstDay'),10); - firstDay = (isNaN(firstDay) ? 0 : firstDay); - var showWeek = this._get(inst, 'showWeek'); - var dayNames = this._get(inst, 'dayNames'); - var dayNamesShort = this._get(inst, 'dayNamesShort'); - var dayNamesMin = this._get(inst, 'dayNamesMin'); - var monthNames = this._get(inst, 'monthNames'); - var monthNamesShort = this._get(inst, 'monthNamesShort'); - var beforeShowDay = this._get(inst, 'beforeShowDay'); - var showOtherMonths = this._get(inst, 'showOtherMonths'); - var selectOtherMonths = this._get(inst, 'selectOtherMonths'); - var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; - var defaultDate = this._getDefaultDate(inst); - var html = ''; - for (var row = 0; row < numMonths[0]; row++) { - var group = ''; - for (var col = 0; col < numMonths[1]; col++) { - var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); - var cornerClass = ' ui-corner-all'; - var calender = ''; - if (isMultiMonth) { - calender += '
'; - } - calender += '
' + - (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + - (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + - this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, - row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers - '
' + - ''; - var thead = (showWeek ? '' : ''); - for (var dow = 0; dow < 7; dow++) { // days of the week - var day = (dow + firstDay) % 7; - thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + - '' + dayNamesMin[day] + ''; - } - calender += thead + ''; - var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); - if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) - inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); - var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; - var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate - var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); - for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows - calender += ''; - var tbody = (!showWeek ? '' : ''); - for (var dow = 0; dow < 7; dow++) { // create date picker days - var daySettings = (beforeShowDay ? - beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); - var otherMonth = (printDate.getMonth() != drawMonth); - var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || - (minDate && printDate < minDate) || (maxDate && printDate > maxDate); - tbody += ''; // display selectable date - printDate.setDate(printDate.getDate() + 1); - printDate = this._daylightSavingAdjust(printDate); - } - calender += tbody + ''; - } - drawMonth++; - if (drawMonth > 11) { - drawMonth = 0; - drawYear++; - } - calender += '
' + this._get(inst, 'weekHeader') + '
' + - this._get(inst, 'calculateWeek')(printDate) + '' + // actions - (otherMonth && !showOtherMonths ? ' ' : // display for other months - (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
' + (isMultiMonth ? '
' + - ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
' : '') : ''); - group += calender; - } - html += group; - } - html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? - '' : ''); - inst._keyEvent = false; - return html; - }, - - /* Generate the month and year header. */ - _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, - secondary, monthNames, monthNamesShort) { - var changeMonth = this._get(inst, 'changeMonth'); - var changeYear = this._get(inst, 'changeYear'); - var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); - var html = '
'; - var monthHtml = ''; - // month selection - if (secondary || !changeMonth) - monthHtml += '' + monthNames[drawMonth] + ''; - else { - var inMinYear = (minDate && minDate.getFullYear() == drawYear); - var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); - monthHtml += ''; - } - if (!showMonthAfterYear) - html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); - // year selection - if (secondary || !changeYear) - html += '' + drawYear + ''; - else { - // determine range of years to display - var years = this._get(inst, 'yearRange').split(':'); - var thisYear = new Date().getFullYear(); - var determineYear = function(value) { - var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : - (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : - parseInt(value, 10))); - return (isNaN(year) ? thisYear : year); - }; - var year = determineYear(years[0]); - var endYear = Math.max(year, determineYear(years[1] || '')); - year = (minDate ? Math.max(year, minDate.getFullYear()) : year); - endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); - html += ''; - } - html += this._get(inst, 'yearSuffix'); - if (showMonthAfterYear) - html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; - html += '
'; // Close datepicker_header - return html; - }, - - /* Adjust one of the date sub-fields. */ - _adjustInstDate: function(inst, offset, period) { - var year = inst.drawYear + (period == 'Y' ? offset : 0); - var month = inst.drawMonth + (period == 'M' ? offset : 0); - var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + - (period == 'D' ? offset : 0); - var date = this._restrictMinMax(inst, - this._daylightSavingAdjust(new Date(year, month, day))); - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); - if (period == 'M' || period == 'Y') - this._notifyChange(inst); - }, - - /* Ensure a date is within any min/max bounds. */ - _restrictMinMax: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - date = (minDate && date < minDate ? minDate : date); - date = (maxDate && date > maxDate ? maxDate : date); - return date; - }, - - /* Notify change of month/year. */ - _notifyChange: function(inst) { - var onChange = this._get(inst, 'onChangeMonthYear'); - if (onChange) - onChange.apply((inst.input ? inst.input[0] : null), - [inst.selectedYear, inst.selectedMonth + 1, inst]); - }, - - /* Determine the number of months to show. */ - _getNumberOfMonths: function(inst) { - var numMonths = this._get(inst, 'numberOfMonths'); - return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); - }, - - /* Determine the current maximum date - ensure no time components are set. */ - _getMinMaxDate: function(inst, minMax) { - return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); - }, - - /* Find the number of days in a given month. */ - _getDaysInMonth: function(year, month) { - return 32 - new Date(year, month, 32).getDate(); - }, - - /* Find the day of the week of the first of a month. */ - _getFirstDayOfMonth: function(year, month) { - return new Date(year, month, 1).getDay(); - }, - - /* Determines if we should allow a "next/prev" month display change. */ - _canAdjustMonth: function(inst, offset, curYear, curMonth) { - var numMonths = this._getNumberOfMonths(inst); - var date = this._daylightSavingAdjust(new Date(curYear, - curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); - if (offset < 0) - date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); - return this._isInRange(inst, date); - }, - - /* Is the given date in the accepted range? */ - _isInRange: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - return ((!minDate || date.getTime() >= minDate.getTime()) && - (!maxDate || date.getTime() <= maxDate.getTime())); - }, - - /* Provide the configuration settings for formatting/parsing. */ - _getFormatConfig: function(inst) { - var shortYearCutoff = this._get(inst, 'shortYearCutoff'); - shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : - new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); - return {shortYearCutoff: shortYearCutoff, - dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), - monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; - }, - - /* Format the given date for display. */ - _formatDate: function(inst, day, month, year) { - if (!day) { - inst.currentDay = inst.selectedDay; - inst.currentMonth = inst.selectedMonth; - inst.currentYear = inst.selectedYear; - } - var date = (day ? (typeof day == 'object' ? day : - this._daylightSavingAdjust(new Date(year, month, day))) : - this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); - return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + }; } }); -/* jQuery extend now ignores nulls! */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) - if (props[name] == null || props[name] == undefined) - target[name] = props[name]; - return target; -}; - -/* Determine whether an object is an array. */ -function isArray(a) { - return (a && (($.browser.safari && typeof a == 'object' && a.length) || - (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); -}; - -/* Invoke the datepicker functionality. - @param options string - a command, optionally followed by additional parameters or - Object - settings for attaching new datepicker functionality - @return jQuery object */ -$.fn.datepicker = function(options){ +$.extend($.ui.datepicker.defaults, $.ui.datepicker.regional['']); - /* Initialise the date picker. */ - if (!$.datepicker.initialized) { - $(document).mousedown($.datepicker._checkExternalClick). - find('body').append($.datepicker.dpDiv); - $.datepicker.initialized = true; +// Close date picker if clicked elsewhere +$(document).click(function(event) { + if (!curDP) { + return; } - - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - return this.each(function() { - typeof options == 'string' ? - $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this].concat(otherArgs)) : - $.datepicker._attachDatepicker(this, options); - }); -}; - -$.datepicker = new Datepicker(); // singleton instance -$.datepicker.initialized = false; -$.datepicker.uuid = new Date().getTime(); -$.datepicker.version = "@VERSION"; - -// Workaround for #4055 -// Add another global to avoid noConflict issues with inline event handlers -window['DP_jQuery_' + dpuuid] = $; + var targets = $(event.target).parents().andSelf(); + if (!(targets.hasClass(curDP.widgetBaseClass + popupClass) || + targets.hasClass(curDP.widgetBaseClass) || + targets.hasClass(curDP.widgetBaseClass + triggerClass))) { + curDP.hide(); + } +}); })(jQuery); From ecd887dbad452a7c9467507d551dc1f03c378f23 Mon Sep 17 00:00:00 2001 From: Keith Wood Date: Tue, 30 Mar 2010 18:37:45 +1000 Subject: [PATCH 2/2] Update comments --- README.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5c7d79a1335..292a7f669ef 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,23 @@ -[jQuery UI](http://jqueryui.com/) - Interactions and Widgets for the web -================================ +jQuery UI Datepicker Refactor +============================= -jQuery UI provides interactions like Drag and Drop and widgets like Autocomplete, Tabs and Slider and makes these as easy to use as jQuery itself. +I've refactored jQuery UI Datepicker to use the Widget framework that the other components use. Along with this refactoring I've introduced several other changes: -If you want to use jQuery UI, go to [jqueryui.com](http://jqueryui.com) to get started. Or visit the [Using jQuery UI Forum](http://forum.jquery.com/using-jquery-ui) for discussions and questions. +* Use of a templating mechanism to generate the datepicker layout. +* Use of commands to provide keystroke and UI elements for interacting with the datepicker. +* Use of the position plugin. +* Common date routines for general use. +* An extension module for less common usage requirements. +* Adobe AIR support (no inline event handlers). -If you are interested in helping developing jQuery UI, you are in the right place. -To discuss development with team members and the community, visit the [Developing jQuery UI Forum](http://forum.jquery.com/developing-jquery-ui). +Have a look at the demos section for datepicker to see the range of functionality. + +For documentation on the templating see http://keith-wood.name/calendarsPickerRef.html#renderers, as the same mechanism is used. The templating is home grown at the moment, but should be moved to the official jQuery model once that has been established. The templating allows for the insertion or otherwise of command links and/or buttons. There are standard templates for the default layout and for one with a button pane. + +For documentation on the commands see http://keith-wood.name/calendarsPickerRef.html#commandsobj, as the same mechanism is used. The use of commands makes it easy to extend the datepicker (as often requested) with custom buttons. It also associates keystrokes with the commands for keyboard-driven entry. + +The common date routines are basically there to support the datepicker functionality but could be extracted into a separate module for more general use. They are: newDate, normaliseDate, daysInMonth, iso8601Week, dayOfYear, add, formatDate, parseDate, determineDate. + +The extension module includes less common functionality: weekOfYearRenderer, noWeekends (onDate), changeFirstDay (onShow), hoverCallback (onShow), highlightWeek (onShow), showStatus (onShow). + +Please comment on any and all of the features at http://forum.jquery.com/topic/jquery-ui-datepicker-refactor as we want to pin down what is eventually included in the next release. \ No newline at end of file