Move jquery.pickadate definitions to module and support Pickadate v3.5.5

This commit is contained in:
Theodore Brown
2015-04-19 16:26:46 -05:00
parent e57df787f4
commit d484d07be6
2 changed files with 677 additions and 306 deletions
+394 -57
View File
@@ -1,20 +1,30 @@
///<reference path="jquery.pickadate.d.ts" />
/*
* Date picker tests
* From http://amsul.ca/pickadate.js/date.htm
*/
// Date picker tests from http://amsul.ca/pickadate.js/date/
$('.datepicker').pickadate();
// Change the month and weekday labels
$('.datepicker').pickadate({
weekdaysShort: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
showMonthsShort: true
});
// Change button text or hide a button completely
$('.datepicker').pickadate({
today: '',
clear: 'Clear selection'
clear: 'Clear selection',
close: 'Cancel'
});
// Change the title attributes of several elements within the picker
$('.datepicker').pickadate({
labelMonthNext: 'Go to the next month',
labelMonthPrev: 'Go to the previous month',
labelMonthSelect: 'Pick a month from the dropdown',
labelYearSelect: 'Pick a year from the dropdown',
selectMonths: true,
selectYears: true
});
// Extend the default picker options for all instances.
@@ -35,6 +45,7 @@ $('.datepicker').pickadate({
formatSubmit: 'yyyy/mm/dd'
});
// Display a human-friendly format and use an alternate one to submit to the server
$('.datepicker').pickadate({
// Escape any "rule" characters with an exclamation mark (!).
format: 'You selecte!d: dddd, dd mmm, yyyy',
@@ -43,30 +54,51 @@ $('.datepicker').pickadate({
hiddenSuffix: '__suffix'
});
// Send the hidden value only
$('.datepicker').pickadate({
formatSubmit: 'yyyy/mm/dd',
hiddenName: true
});
// Editable input
$('.datepicker').pickadate({
editable: true
});
// Display select menus to pick the month and year
$('.datepicker').pickadate({
selectYears: true,
selectMonths: true
});
// Specify the number of years to show in the dropdown using an
// even integer - half before and half after the year in focus:
$('.datepicker').pickadate({
// `true` defaults to 10.
selectYears: 4
});
// The first day of the week can be set to either Sunday or Monday.
// Anything truth-y sets it as Monday and anything false-y as Sunday.
$('.datepicker').pickadate({
firstDay: 1
});
// Date Limits
// Using JavaScript dates
$('.datepicker').pickadate({
min: new Date(2013, 3, 20),
max: new Date(2013, 7, 14)
});
// Using arrays formatted as [YEAR,MONTH,DATE]
$('.datepicker').pickadate({
min: [2013, 3, 20],
max: [2013, 7, 14]
});
// Using integers or a boolean
$('.datepicker').pickadate({
// An integer (positive/negative) sets it relative to today.
min: -15,
@@ -74,21 +106,9 @@ $('.datepicker').pickadate({
max: true
});
$('.datepicker').pickadate({
disable: [
[2013, 3, 3],
[2013, 3, 12],
[2013, 3, 20],
[2013, 3, 29]
]
});
$('.datepicker').pickadate({
disable: [
1, 4, 7
]
});
// Disable dates
// Using JavaScript dates
$('.datepicker').pickadate({
disable: [
new Date(2013, 3, 13),
@@ -96,6 +116,30 @@ $('.datepicker').pickadate({
]
});
// Using arrays formatted as [YEAR,MONTH,DATE]
$('.datepicker').pickadate({
disable: [
[2015, 3, 3],
[2015, 3, 12],
[2015, 3, 20]
]
});
// Using integers as days of the week (1 to 7)
$('.datepicker').pickadate({
disable: [
1, 4, 7
]
});
// Using objects as a range of dates
$('.datepicker').pickadate({
disable: [
{ from: [2016, 2, 14], to: [2016, 2, 27] }
]
});
// Enable only a specific or arbitrary set of dates by setting true as the first item in the collection
$('.datepicker').pickadate({
disable: [
true,
@@ -103,14 +147,40 @@ $('.datepicker').pickadate({
[2013, 3, 3],
[2013, 3, 12],
[2013, 3, 20],
[2013, 3, 29]
new Date(2015, 3, 13),
new Date(2015, 3, 29)
]
});
// Enable dates that fall within a range of disabled dates by adding
// the inverted parameter to the item within the collection
$('.datepicker').pickadate({
container: '#root-outlet'
disable: [
5,
[2015, 10, 21, 'inverted'],
{ from: [2016, 3, 15], to: [2016, 3, 25] },
[2016, 3, 20, 'inverted'],
{ from: [2016, 3, 17], to: [2016, 3, 18], inverted: true }
]
});
// Specify where to insert the root element by passing any valid CSS selector to the container option
$('.datepicker').pickadate({
container: '#root-picker-outlet'
});
// Specify where to insert the hidden element by passing any valid CSS selector to the containerHidden option
$('.datepicker').pickadate({
containerHidden: '#hidden-input-outlet'
});
// Close on a user action
$('.datepicker').pickadate({
closeOnSelect: false,
closeOnClear: false
});
// Fire off events as the user interacts with the picker
$('.datepicker').pickadate({
onStart: function () {
console.log('Hello there :)')
@@ -127,22 +197,31 @@ $('.datepicker').pickadate({
onStop: function () {
console.log('See ya.')
},
onSet: function (event) {
console.log('Just set stuff:', event)
onSet: function (context) {
console.log('Just set stuff:', context)
}
});
/*
* Time picker tests
* From http://amsul.ca/pickadate.js/time.htm
*/
// Time picker tests from http://amsul.ca/pickadate.js/time/
$('.timepicker').pickatime();
// Extend the default picker options for all instances.
$.extend($.fn.pickatime.defaults, {
clear: 'Effacer'
})
// Or, pass the months and weekdays as an array for each invocation.
$('.timepicker').pickatime({
clear: 'Effacer'
})
// Change the text or hide the button completely by passing a false-y value
$('.timepicker').pickatime({
clear: ''
});
// Display a human-friendly label and input format and use an alternate one to submit
$('.timepicker').pickatime({
// Escape any "rule" characters with an exclamation mark (!).
format: 'T!ime selected: h:i a',
@@ -152,23 +231,47 @@ $('.timepicker').pickatime({
hiddenSuffix: '__suffix'
});
// The formatLabel option is unique. It can contain HTML and it can also
// be a function if you want to create the label during run-time:
$('.timepicker').pickatime({
formatLabel: function (time: TimePickerItemObject) {
formatLabel: function (time) {
var hours = (time.pick - this.get('now').pick) / 60,
label = hours < 0 ? ' !hours to now' : hours > 0 ? ' !hours from now' : 'now'
return 'h:i a <sm!all>' + (hours ? Math.abs(hours).toString() : '') + label + '</sm!all>'
return 'h:i a <sm!all>' + (hours ? Math.abs(hours) : '') + label + '</sm!all>'
}
});
$('.datepicker').pickadate({
// Send the hidden value only
$('.timepicker').pickatime({
formatSubmit: 'HH:i',
hiddenName: true
});
// Editable input
$('.timepicker').pickatime({
editable: true
});
// Choose the minutes interval between each time in the list
$('.timepicker').pickatime({
interval: 150
});
// Time Limits
// Using JavaScript dates
$('.timepicker').pickatime({
min: new Date(2015, 3, 20, 7),
max: new Date(2015, 7, 14, 18, 30)
});
// Using arrays formatted as [HOUR,MINUTE]
$('.timepicker').pickatime({
min: [7, 30],
max: [14, 0]
});
// Using integers or a boolean
$('.timepicker').pickatime({
// An integer (positive/negative) sets it as intervals relative from now.
min: -5,
@@ -176,6 +279,17 @@ $('.timepicker').pickatime({
max: true
});
// Disable Times
// Using JavaScript dates
$('.timepicker').pickatime({
disable: [
new Date(2016, 3, 20, 4, 30),
new Date(2016, 3, 20, 9)
]
});
// Using arrays formatted as [HOUR,MINUTE]
$('.timepicker').pickatime({
disable: [
[0, 30],
@@ -185,12 +299,21 @@ $('.timepicker').pickatime({
]
});
// Using integers as hours (0 to 23)
$('.timepicker').pickatime({
disable: [
3, 5, 7
]
});
// Using objects as a range of times
$('.timepicker').pickatime({
disable: [
{ from: [2, 0], to: [5, 30] }
]
});
// Enable only a specific or arbitrary set of times by setting true as the first item in the collection
$('.timepicker').pickatime({
disable: [
true,
@@ -202,10 +325,35 @@ $('.timepicker').pickatime({
]
});
// Enable times that fall within a range of disabled times by adding
// the inverted parameter to the item within the collection
$('.timepicker').pickatime({
container: '#root-outlet'
disable: [
1,
[1, 30, 'inverted'],
{ from: [4, 30], to: [10, 30] },
[6, 30, 'inverted'],
{ from: [8, 0], to: [9, 0], inverted: true }
]
});
// Specify where to insert the root element by passing any valid CSS selector to the container option
$('.timepicker').pickatime({
container: '#root-picker-outlet'
});
// Specify where to insert the hidden element by passing any valid CSS selector to the containerHidden option
$('.timepicker').pickatime({
containerHidden: '#hidden-input-outlet'
});
// Close on a user action
$('.timepicker').pickatime({
closeOnSelect: false,
closeOnClear: false
});
// Fire off events as the user interacts with the picker
$('.timepicker').pickatime({
onStart: function () {
console.log('Hello there :)')
@@ -222,15 +370,12 @@ $('.timepicker').pickatime({
onStop: function () {
console.log('See ya.')
},
onSet: function (event) {
console.log('Just set stuff:', event)
onSet: function (context) {
console.log('Just set stuff:', context)
}
});
/*
* API tests
* From http://amsul.ca/pickadate.js/api.htm
*/
// API tests from http://amsul.ca/pickadate.js/api/
var $input = $('.datepicker').pickadate();
@@ -243,17 +388,18 @@ picker.open();
picker.close();
picker.close(true);
picker.open(false)
picker.open(false);
$(document).on('click', function () {
picker.close()
picker.close();
});
picker.start();
picker.stop();
picker.render();
picker.render(true);
picker.clear();
picker.get() // Short for `picker.get('value')`
picker.get(); // Short for `picker.get('value')`
picker.get('select');
picker.get('select', 'yyyy/mm/dd');
@@ -262,6 +408,7 @@ picker.get('highlight');
picker.get('highlight', 'yyyy/mm/dd');
picker.get('view');
picker.get('view', 'yyyy/mm/dd');
picker.get('min');
picker.get('min', 'yyyy/mm/dd');
@@ -271,63 +418,105 @@ picker.get('max', 'yyyy/mm/dd');
picker.get('open');
picker.get('start');
picker.get('id');
picker.get('enable');
picker.get('disable');
picker.set('clear');
// reset disabled dates
picker.set('disable', undefined);
// Set select for a date item object
// Using arrays formatted as [YEAR,MONTH,DATE].
picker.set('select', [2013, 3, 20]);
// Using JavaScript Date objects.
picker.set('select', new Date(2013,03,20));
picker.set('select', new Date(2013, 3, 20));
// Using positive integers as UNIX timestamps.
picker.set('select', 1365961912346);
// Using a string along with the parsing format (defaults to `format` option).
picker.set('select', '2016-04-20', { format: 'yyyy-mm-dd' });
// Set select for a time item object
// Using arrays formatted as [HOUR,MINUTE].
picker.set('select', [3, 0]);
// Using JavaScript Date objects.
picker.set('select', new Date(2015, 3, 20, 10, 30));
// Using positive integers as minutes.
picker.set('select', 540);
// Using a string along with the parsing format (defaults to `format` option).
picker.set('select', '04-30', { format: 'hh-i' });
// Set highlight for a date item object
// Using arrays formatted as [YEAR,MONTH,DATE].
picker.set('highlight', [2013, 3, 20]);
// Using JavaScript Date objects.
picker.set('highlight', new Date(2013,7,14));
picker.set('highlight', new Date(2015, 3, 30));
// Using positive integers as UNIX timestamps.
picker.set('highlight', 1365961912346);
// Using a string along with the parsing format (defaults to `format` option).
picker.set('highlight', '2016-04-20', { format: 'yyyy-mm-dd' });
// Set highlight for a time item object
// Using arrays formatted as [HOUR,MINUTE].
picker.set('highlight', [15, 30]);
// Using JavaScript Date objects.
picker.set('highlight', new Date(2015, 3, 20, 10, 30));
// Using positive integers as minutes.
picker.set('highlight', 1080);
// Using a string along with the parsing format (defaults to `format` option).
picker.set('highlight', '04-30', { format: 'hh-i' });
// Set view for a date item object
// Using arrays formatted as [YEAR,MONTH,DATE].
picker.set('view', [2000, 3, 20]);
// Using JavaScript Date objects.
picker.set('view', new Date(1988,7,14));
picker.set('view', new Date(1988, 7, 14));
// Using positive integers as UNIX timestamps.
picker.set('view', 1587355200000);
// Using a string along with the parsing format (defaults to `format` option).
picker.set('view', '2016-04-20', { format: 'yyyy-mm-dd' });
// Set view for a time item object
// Using arrays formatted as [HOUR,MINUTE].
picker.set('view', [15, 30]);
// Using JavaScript Date objects.
picker.set('view', new Date(2015, 3, 20, 10, 30));
// Using positive integers as minutes.
picker.set('view', 1080);
// Using a string along with the parsing format (defaults to `format` option).
picker.set('view', '04-30', { format: 'hh-i' });
// Limit the min date
// Using arrays formatted as [YEAR,MONTH,DATE].
picker.set('min', [2013, 3, 20]);
// Using JavaScript Date objects.
picker.set('min', new Date(2013,7,14));
picker.set('min', new Date(2015, 7, 14));
// Using formatted strings.
picker.set('min', '8 January, 2016');
// Using integers as days relative to today.
picker.set('min', -4);
@@ -338,9 +527,17 @@ picker.set('min', true);
// Using `false` to remove.
picker.set('min', false);
// Limit the min time
// Using arrays formatted as [HOUR,MINUTE].
picker.set('min', [15, 30]);
// Using JavaScript Date objects.
picker.set('min', new Date(2015, 3, 20, 10, 30));
// Using formatted strings.
picker.set('min', '4:30 PM');
// Using integers as intervals relative from now.
picker.set('min', -4);
@@ -350,11 +547,16 @@ picker.set('min', true);
// Using `false` to remove.
picker.set('min', false);
// Limit the max date
// Using arrays formatted as [YEAR,MONTH,DATE].
picker.set('max', [2013, 3, 20]);
// Using JavaScript Date objects.
picker.set('max', new Date(2013,7,14));
picker.set('max', new Date(2015, 7, 14));
// Using formatted strings.
picker.set('max', '20 April, 2016');
// Using integers as days relative to today.
picker.set('max', 4);
@@ -365,9 +567,17 @@ picker.set('max', true);
// Using `false` to remove.
picker.set('max', false);
// Limit the max time
// Using arrays formatted as [HOUR,MINUTE].
picker.set('max', [15, 30]);
// Using JavaScript Date objects.
picker.set('max', new Date(2015, 3, 20, 10, 30));
// Using formatted strings.
picker.set('max', '11:30 AM');
// Using integers as intervals relative from now.
picker.set('max', 4);
@@ -377,16 +587,131 @@ picker.set('max', true);
// Using `false` to remove.
picker.set('max', false);
picker.on('open', function () {
console.log('Opened.. and here I am!');
});
// Disable/enable specific dates
picker.set('disable', [
// Using a collection of arrays formatted as [YEAR,MONTH,DATE]
[2016, 9, 3], [2016, 9, 9], [2016, 9, 20],
// Using JavaScript Date objects
new Date(2015, 9, 13), new Date(2015, 9, 24)
]);
picker.set('enable', [
[2016, 9, 9],
[2016, 9, 13],
new Date(2015, 9, 20)
]);
// Disable/enable ranges of dates
picker.set('disable', [
1, 4, 7, // Using integers as the days of the week (1 to 7)
// Using a range object with a "from" and "to" property
{ from: [2016, 2, 14], to: [2016, 2, 27] }
]);
picker.set('enable', [
4,
{ from: [2016, 2, 24], to: [2016, 2, 27] }
]);
// "Flip" the enabled and disabled dates:
picker.set('disable', 'flip');
picker.set('enable', 'flip');
// Disable all the dates
picker.set('disable', true);
picker.set('enable', false);
// Enable all the dates
picker.set('enable', true);
picker.set('disable', false);
// Disable/enable specific times
picker.set('disable', [
// Using a collection of arrays formatted as [HOUR,MINUTES]
[2, 30], [4, 30], [9, 0],
// Using JavaScript Date objects
new Date(2015, 9, 13, 6), new Date(2015, 9, 13, 12, 30)
]);
picker.set('enable', [
[4, 30], [6, 0],
new Date(2015, 9, 13, 9)
]);
// Disable/enable ranges of times
picker.set('disable', [
1, 4, 7, // Using integers as hours of the day (from 0 to 23)
// Using a range object with a “from” and “to” property
{ from: [10, 30], to: [18, 0] }
]);
picker.set('enable', [
4,
{ from: [14, 0], to: [16, 30] }
]);
// "Flip" the enabled and disabled times:
picker.set('disable', 'flip');
picker.set('enable', 'flip');
// Disable all the times
picker.set('disable', true);
picker.set('enable', true);
// Enable all the times
picker.set('enable', true);
picker.set('disable', false);
// Enable an element within a disabled range
picker.set('disable', [
// Disable all Mondays, except November 15th, 2015.
1, [2015, 10, 15, 'inverted'],
// Disable all dates from March 2nd, 2016 to March 28th, 2016
// except for March 10th and all between March 14th and March 23rd.
{ from: [2016, 2, 2], to: [2016, 2, 28] },
[2016, 2, 10, 'inverted'],
{ from: [2016, 2, 14], to: [2016, 2, 23], inverted: true }
]);
picker.set('disable', [
// Disable all times from 1:00 AM to 1:59 AM, except 1:30 AM.
1, [1, 30, 'inverted'],
// Disable all times from 3:00 AM to 6:00 PM except
// for 4:30 AM and all between 7:30 AM and 11:30 AM.
{ from: [3, 0], to: [18, 0] },
[4, 30, 'inverted'],
{ from: [7, 30], to: [11, 30], inverted: true }
]);
// For the time picker only, you can change the interval between each time display
// using integers representing the interval length in minutes.
picker.set('interval', 15);
picker.set('interval', 20);
picker.set('interval', 120);
picker.on({
open: function () {
console.log('Opened.. and here I am!');
console.log('Opened up!')
},
close: function () {
console.log('Closed.. and here I am!');
console.log('Closed now')
},
render: function () {
console.log('Just rendered anew')
},
stop: function () {
console.log('See ya')
},
set: function (thingSet) {
console.log('Set stuff:', thingSet)
}
});
@@ -406,15 +731,27 @@ $('.datepicker').pickadate({
onStop: function () {
console.log('See ya')
},
onSet: function (event) {
console.log('Set stuff:', event)
onSet: function (thingSet) {
console.log('Set stuff:', thingSet)
}
});
picker.on('open', function () {
console.log('Didn\'t open.. yet here I am!');
})
console.log('Even when Im opened, Im not logged..');
});
picker.off('open');
// Trigger an events callbacks that have been queued up
picker.on('open', function () {
console.log('This logs without opening!');
});
picker.trigger('open');
// Optionally, you can also pass some data to the method being triggered
picker.on('open', function (data) {
console.log('This logs without opening with this data:', data);
});
picker.trigger('open', { some: 'value' });
picker.$node;
picker.$root;
picker.$root;
+283 -249
View File
@@ -1,69 +1,19 @@
// Type definitions for pickadate.js 3.3.0
// Type definitions for pickadate.js 3.5.5
// Project: https://github.com/amsul/pickadate.js
// Definitions by: Theodore Brown <https://github.com/theodorejb/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
///<reference path="../jquery/jquery.d.ts" />
/** Options shared between date and time pickers */
interface pickerOptions {
/** Set clear button text */
clear?: string; // default 'Clear'
/** Specify where to insert the picker's root element by passing any valid CSS selector to this option */
container?: any;
// Events
onStart?: (event: any) => void;
onRender?: (event: any) => void;
onOpen?: (event: any) => void;
onClose?: (event: any) => void;
onSet?: (event: any) => void;
onStop?: (event: any) => void;
}
interface pickadateOptions extends pickerOptions {
// Strings and translations
monthsFull?: string[]; // default 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'
monthsShort?: string[]; // default 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
weekdaysFull?: string[]; // default 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
weekdaysShort?: string[]; // default 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
showMonthsShort?: boolean;
showWeekdaysFull?: boolean;
// Buttons
today?: string; // default 'Today'
// Formats
format?: string; // default 'd mmmm, yyyy'
formatSubmit?: string; // e.g. 'yyyy/mm/dd'
hiddenPrefix?: string; // default undefined
hiddenSuffix?: string; // default '_submit'
hiddenName?: boolean; // default undefined
// Dropdown selectors
selectYears?: any; // Specify the number of years selectable using an even integer - half before and half after the year in focus:
selectMonths?: boolean;
// First day of the week
firstDay?: any; // The first day of the week can be set to either Sunday or Monday. Anything truth-y sets it as Monday and anything false-y as Sunday
// Date limits
min?: any; // date object, array formatted as [YEAR,MONTH,DATE], or dates relative to today using integers or a boolean (`true` sets it to today. `false` removes any limits).
max?: any;
// Disable dates
disable?: any[]; // Date objects, arrays formatted as [YEAR,MONTH,DATE], or integers representing days of the week (from 1 to 7). Switch to whitelist by setting first item in collection to `true`.
// Classes
klass?: {
declare module Pickadate {
/** KlassOptions shared between date and time pickers */
interface KlassOptions {
// The element states
input?: string; // default 'picker__input'
active?: string; // default 'picker__input--active'
// The root picker and states
picker?: string; // default 'picker'
picker?: string; // default 'picker' or 'picker picker--time'
opened?: string; // default 'picker--opened'
focused?: string; // default 'picker--focused'
@@ -75,6 +25,17 @@ interface pickadateOptions extends pickerOptions {
wrap?: string; // default 'picker__wrap'
box?: string; // default 'picker__box'
// Day/Time states
disabled?: string; // default 'picker__day--disabled' or 'picker__list-item--disabled'
selected?: string // default 'picker__day--selected' or 'picker__list-item--selected'
highlighted?: string // default 'picker__day--highlighted' or 'picker__list-item--highlighted'
now?: string; // default 'picker__day--today' or 'picker__list-item--now'
// Clear button
buttonClear?: string; // default 'picker__button--clear'
}
interface DateKlassOptions extends KlassOptions {
// The picker header
header?: string; // default 'picker__header'
@@ -99,221 +60,294 @@ interface pickadateOptions extends pickerOptions {
// Day states
day?: string; // default 'picker__day'
disabled?: string; // default 'picker__day--disabled'
selected?: string // default 'picker__day--selected'
highlighted?: string // default 'picker__day--highlighted'
now?: string; // default 'picker__day--today'
infocus?: string; // default 'picker__day--infocus'
outfocus?: string; // default 'picker__day--outfocus'
// The picker footer
footer?: string; // default 'picker__footer'
// Today & clear buttons
buttonClear?: string; // default 'picker__button--clear'
// Today & close buttons
buttonClose?: string; // default 'picker__button--close'
buttonToday?: string; // default 'picker__button--today'
}
}
interface pickatimeOptions extends pickerOptions {
// Formats
format?: string; // default 'h:i A'
formatLabel?: any;
formatSubmit?: string;
hiddenPrefix?: string; // default undefined
hiddenSuffix?: string; // default '_submit'
// Time intervals
interval?: number; // interval in minutes. default 30.
// Time limits
min?: any; // array formatted as [HOUR,MINUTE], or as times relative to now using integers or a boolean (`true` sets it to now, `false` removes any limits).
max?: any;
// Disable times
disable?: any[]; // arrays formatted as [HOUR,MINUTE] or integers representing hours (from 0 to 23). Switch to whitelist by setting true as the first item in the collection.
// Classes
klass?: {
// The element states
input?: string; // default 'picker__input'
active?: string; // default 'picker__input--active'
// The root picker and states
picker?: string; // default 'picker picker--time'
opened?: string; // default 'picker--opened'
focused?: string; // default 'picker--focused'
// The picker holder
holder?: string; // default 'picker__holder'
// The picker frame, wrapper, and box
frame?: string; // default 'picker__frame'
wrap?: string; // default 'picker__wrap'
box?: string; // default 'picker__box'
interface TimeKlassOptions extends KlassOptions {
// The root picker
picker?: string; // default 'picker picker--time'
// List of times
list?: string; // default 'picker__list'
listItem?: string; // default 'picker__list-item'
// Time states
disabled?: string; // default 'picker__list-item--disabled'
selected?: string; // default 'picker__list-item--selected'
highlighted?: string; // default 'picker__list-item--highlighted'
viewset?: string; // default 'picker__list-item--viewset'
now?: string; // default 'picker__list-item--now'
// Clear button
buttonClear?: string; // default 'picker__button--clear'
}
/** Options shared between date and time pickers */
interface Options {
/** Set clear button text */
clear?: string; // default 'Clear'
/**
* The human-friendly display format.
* Escape any "rule" characters with an exclamation mark (!).
*/
format?: string; // default 'd mmmm, yyyy'
/** An alternate format to submit to the server. */
formatSubmit?: string; // default undefined
hiddenPrefix?: string; // default undefined
hiddenSuffix?: string; // default '_submit'
/**
* A majority of the time, the value that needs to be sent to the server is just the hidden value
* and not the visible one. To make this happen, use the hiddenName option.
* This essentially nullifies the hiddenPrefix and hiddenSuffix, strips the name attribute from the source input, and then sets it as the name of the hidden input:
*/
hiddenName?: boolean; // default undefined
/**
* By default, typing into the input is disabled by giving it a readOnly attribute.
* Setting the editable option to true allows the input field to be edited directly.
*/
editable?: boolean;
/** Specify where to insert the picker's root element by passing any valid CSS selector to this option */
container?: string; // default undefined
/** The hidden input container */
containerHidden?: string; // default undefined
// Close on a user action
closeOnSelect?: boolean; // default true
closeOnClear?: boolean; // default true
// Events
onStart?: (event: any) => void;
onRender?: (event: any) => void;
onOpen?: (event: any) => void;
onClose?: (event: any) => void;
onSet?: (event: any) => void;
onStop?: (event: any) => void;
}
export interface DateOptions extends Options {
// Strings and translations
monthsFull?: string[]; // default 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'
monthsShort?: string[]; // default 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
weekdaysFull?: string[]; // default 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
weekdaysShort?: string[]; // default 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
showMonthsShort?: boolean;
showWeekdaysFull?: boolean;
// Buttons
today?: string; // default 'Today'
close?: string; // default 'Close'
// Accessibility labels
labelMonthNext?: string; // default 'Next month'
labelMonthPrev?: string; // default 'Previous month'
labelMonthSelect?: string; // default 'Select a month'
labelYearSelect?: string; //default 'Select a year'
/**
* True enables the dropdown selector and false replaces it with text.
* You can also specify the number of years to show in the dropdown using an even integer
* - half before and half after the year in focus. If true the value will default to 10.
*/
selectYears?: boolean|number;
/** True enables the dropdown selector and false replaces it with text */
selectMonths?: boolean;
/**
* The first day of the week can be set to either Sunday or Monday.
* True or 1 sets it as Monday and false or 0 as Sunday.
*/
firstDay?: boolean|number;
// Date limits
min?: any; // date object, array formatted as [YEAR,MONTH,DATE], or dates relative to today using integers or a boolean (`true` sets it to today. `false` removes any limits).
max?: any;
// Disable dates
disable?: any[]; // Date objects, arrays formatted as [YEAR,MONTH,DATE], or integers representing days of the week (from 1 to 7). Switch to whitelist by setting first item in collection to `true`.
// Classes
klass?: DateKlassOptions;
}
export interface TimeOptions extends Options {
/**
* The formatLabel option is unique. It can contain HTML and it can
* also be a function if you want to create the label during run-time.
*/
formatLabel?: string|((time: TimeItem) => string);
/**
* Choose the interval in minutes between each time in the list.
* Default is 30.
*/
interval?: number;
// Time limits
min?: any; // array formatted as [HOUR,MINUTE], or as times relative to now using integers or a boolean (`true` sets it to now, `false` removes any limits).
max?: any;
// Disable times
disable?: any[]; // arrays formatted as [HOUR,MINUTE] or integers representing hours (from 0 to 23). Switch to whitelist by setting true as the first item in the collection.
// Classes
klass?: TimeKlassOptions;
}
interface Item {
/** The "pick" value used for comparisons. */
pick: number;
}
export interface DateItem extends Item {
/** The full year. */
year: number;
/** The month with zero-as-index. */
month: number;
/** The date of the month. */
date: number;
/** The day of the week with zero-as-index. */
day: number;
/** The underlying JavaScript Date object. */
obj: Date;
}
export interface TimeItem extends Item {
/** Hour of the day from 0 to 23. */
hour: number;
/** The minutes of the hour from 0 to 59 (based on the interval). */
mins: number;
}
export interface CallbackObject {
open?: () => void;
close?: () => void;
render?: () => void;
start?: () => void;
stop?: () => void;
set?: (thingset) => void;
}
export interface SetObject {
clear?: any;
select?: any;
highlight?: any;
view?: any;
min?: any;
max?: any;
disable?: any;
enable?: any;
}
export interface TimeSetObject extends SetObject {
interval?: number;
}
interface Picker<TPickerObject, TItemObject extends Item, TOptions extends SetObject> {
/** The picker's relative input element wrapped as a jQuery object. */
$node: JQuery;
/** The picker's relative root holder element wrapped as a jQuery object. */
$root: JQuery;
open(withoutFocus?: boolean): TPickerObject;
close(withFocus?: boolean): TPickerObject;
/** Rebuild the picker. */
start(): TPickerObject;
/** Destroy the picker. */
stop(): TPickerObject;
/**
* Refresh the picker box after adding something to the holder.
* By default, only the "face" of the picker (i.e. the box element)
* has its contents re-rendered. To render the entire picker from
* the root up, pass true as the first argument.
*/
render(entirePicker?: boolean): TPickerObject;
/** Clear the value in the picker's input element. */
clear(): TPickerObject;
/** Short for picker.get('value') */
get(): string;
/** Get the properties, objects, and states that make up the current state of the picker. */
get(thing: string): any;
/** Returns the string value of the picker's input element. */
get(thing: 'value'): string;
/** Returns the item object that is visually selected. */
get(thing: 'select'): TItemObject;
/** Returns the item object that is visually highlighted. */
get(thing: 'highlight'): TItemObject;
/** Returns the item object that sets the current view. */
get(thing: 'view'): TItemObject;
/** Returns the item object that limits the picker's lower range. */
get(thing: 'min'): TItemObject;
/** Returns the item object that limits the picker's upper range. */
get(thing: 'max'): TItemObject;
/** Returns a boolean value of whether the picker is open or not. */
get(thing: 'open'): boolean;
/** Returns a boolean value of whether the picker has started or not. */
get(thing: 'start'): boolean;
/** Returns a unique 9-digit integer that is the ID of the picker. */
get(thing: 'id'): number;
/** Returns an array of items that determine which item objects to disable on the picker. */
get(thing: 'disable'): any[];
/** Returns a formatted string for the item object specified by `thing` */
get(thing: string, format: string): string;
/** Set the properties, objects, and states to change the state of the picker. */
set(thing: string, value?: any, options?: any): TPickerObject;
set(things: TOptions, options?: any): TPickerObject;
/** Bind callbacks to get fired off when the relative picker method is called. */
on(methodName: string, callback: (data?: any) => void): TPickerObject;
/** Bind multiple callbacks at once to get fired off when the relative picker method is called. */
on(callbackObject: CallbackObject): TPickerObject;
/** Unbind callbacks that are bound using the on method. */
off(...methodName: string[]): TPickerObject;
/** Trigger callbacks that have been queued up using the the on method. */
trigger(event: string, data?: any): TPickerObject;
}
interface DatePicker extends Picker<DatePicker, DateItem, SetObject> { }
interface TimePicker extends Picker<TimePicker, TimeItem, TimeSetObject> { }
}
interface PickerItemObject {
/** The "pick" value used for comparisons. */
pick: number;
}
interface DatePickerItemObject extends PickerItemObject {
/** The full year. */
year: number;
/** The month with zero-as-index. */
month: number;
/** The date of the month. */
date: number;
/** The day of the week with zero-as-index. */
day: number;
/** The underlying JavaScript Date object. */
obj: Date;
}
interface TimePickerItemObject extends PickerItemObject {
/** Hour of the day from 0 to 23. */
hour: number;
/** The minutes of the hour from 0 to 59 (based on the interval). */
mins: number;
}
interface CallbackObject {
open?: () => void;
close?: () => void;
render?: () => void;
start?: () => void;
stop?: () => void;
set?: () => void;
}
interface SetThings {
clear?;
select?: any;
highlight?: any;
view?: any;
min?: any;
max?: any;
disable?: any;
enable?: any;
}
interface TimePickerSetThings extends SetThings {
interval?: any;
}
interface PickerObject<TPickerObject, TItemObject extends PickerItemObject, TOptions extends SetThings> {
/** The picker's relative input element wrapped as a jQuery object. */
$node: JQuery;
/** The picker's relative root holder element wrapped as a jQuery object. */
$root: JQuery;
open(withoutFocus?: boolean): TPickerObject;
close(withFocus?: boolean): TPickerObject;
/** Rebuild the picker. */
start(): TPickerObject;
/** Destroy the picker. */
stop(): TPickerObject;
/**
* Refresh the picker box after adding something to the holder.
* By default, only the "face" of the picker (i.e. the box element)
* has its contents re-rendered. To render the entire picker from
* the root up, pass true as the first argument.
*/
render(entirePicker?: boolean): TPickerObject;
/** Clear the value in the picker's input element. */
clear(): TPickerObject;
/** Short for picker.get('value') */
get(): string;
/** Get the properties, objects, and states that make up the current state of the picker. */
get(thing: string): any;
/** Returns the string value of the picker's input element. */
get(thing: 'value'): string;
/** Returns the item object that is visually selected. */
get(thing: 'select'): TItemObject;
/** Returns the item object that is visually highlighted. */
get(thing: 'highlight'): TItemObject;
/** Returns the item object that sets the current view. */
get(thing: 'view'): TItemObject;
/** Returns the item object that limits the picker's lower range. */
get(thing: 'min'): TItemObject;
/** Returns the item object that limits the picker's upper range. */
get(thing: 'max'): TItemObject;
/** Returns a boolean value of whether the picker is open or not. */
get(thing: 'open'): boolean;
/** Returns a boolean value of whether the picker has started or not. */
get(thing: 'start'): boolean;
/** Returns a unique 9-digit integer that is the ID of the picker. */
get(thing: 'id'): number;
/** Returns an array of items that determine which item objects to disable on the picker. */
get(thing: 'disable'): any[];
/** Returns a formatted string for the item object specified by `thing` */
get(thing: string, format: string): string;
/** Set the properties, objects, and states to change the state of the picker. */
set(thing: string, value?: any, options?: any): TPickerObject;
set(things: TOptions, options?: any): TPickerObject;
/** Bind callbacks to get fired off when the relative picker method is called. */
on(methodName, callback: () => void): TPickerObject;
/** Bind multiple callbacks at once to get fired off when the relative picker method is called. */
on(callbackObject: CallbackObject): TPickerObject;
/** Trigger callbacks that have been queued up using the the on method. */
trigger(event: string): TPickerObject;
}
interface DatePickerObject extends PickerObject<DatePickerObject, DatePickerItemObject, SetThings> { }
interface TimePickerObject extends PickerObject<TimePickerObject, TimePickerItemObject, TimePickerSetThings> { }
interface JQuery {
pickadate(methodName: "picker"): DatePickerObject;
pickadate(methodName: "picker"): Pickadate.DatePicker;
pickadate(methodName: string): any;
pickadate(options?: pickadateOptions): JQuery;
pickadate(options?: Pickadate.DateOptions): JQuery;
pickatime(methodName: "picker"): TimePickerObject;
pickatime(methodName: "picker"): Pickadate.TimePicker;
pickatime(methodName: string): any;
pickatime(options?: pickatimeOptions): JQuery;
pickatime(options?: Pickadate.TimeOptions): JQuery;
}