Showing preview only (465K chars total). Download the full file or copy to clipboard to get everything.
Repository: amsul/pickadate.js
Branch: master
Commit: 0fd34eab2b41
Files: 148
Total size: 430.6 KB
Directory structure:
gitextract_wdcyfm8v/
├── .gitignore
├── .jshintrc
├── .travis.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE.md
├── README.md
├── bower.json
├── lib/
│ ├── compressed/
│ │ ├── legacy.js
│ │ ├── picker.date.js
│ │ ├── picker.js
│ │ ├── picker.time.js
│ │ ├── themes/
│ │ │ ├── classic.css
│ │ │ ├── classic.date.css
│ │ │ ├── classic.time.css
│ │ │ ├── default.css
│ │ │ ├── default.date.css
│ │ │ ├── default.time.css
│ │ │ └── rtl.css
│ │ └── translations/
│ │ ├── ar.js
│ │ ├── bg_BG.js
│ │ ├── bs_BA.js
│ │ ├── ca_ES.js
│ │ ├── cs_CZ.js
│ │ ├── da_DK.js
│ │ ├── de_DE.js
│ │ ├── el_GR.js
│ │ ├── es_ES.js
│ │ ├── et_EE.js
│ │ ├── eu_ES.js
│ │ ├── fa_IR.js
│ │ ├── fi_FI.js
│ │ ├── fr_FR.js
│ │ ├── ge_GEO.js
│ │ ├── gl_ES.js
│ │ ├── he_IL.js
│ │ ├── hi_IN.js
│ │ ├── hr_HR.js
│ │ ├── hu_HU.js
│ │ ├── id_ID.js
│ │ ├── is_IS.js
│ │ ├── it_IT.js
│ │ ├── ja_JP.js
│ │ ├── km_KH.js
│ │ ├── ko_KR.js
│ │ ├── lt_LT.js
│ │ ├── lv_LV.js
│ │ ├── nb_NO.js
│ │ ├── ne_NP.js
│ │ ├── nl_NL.js
│ │ ├── no_NO.js
│ │ ├── pl_PL.js
│ │ ├── pt_BR.js
│ │ ├── pt_PT.js
│ │ ├── ro_RO.js
│ │ ├── ru_RU.js
│ │ ├── sk_SK.js
│ │ ├── sl_SI.js
│ │ ├── sr_RS_cy.js
│ │ ├── sr_RS_lt.js
│ │ ├── sv_SE.js
│ │ ├── th_TH.js
│ │ ├── tr_TR.js
│ │ ├── uk_UA.js
│ │ ├── vi_VN.js
│ │ ├── zh_CN.js
│ │ └── zh_TW.js
│ ├── legacy.js
│ ├── picker.date.js
│ ├── picker.js
│ ├── picker.time.js
│ ├── themes/
│ │ ├── classic.css
│ │ ├── classic.date.css
│ │ ├── classic.time.css
│ │ ├── default.css
│ │ ├── default.date.css
│ │ ├── default.time.css
│ │ └── rtl.css
│ ├── themes-source/
│ │ ├── _variables.less
│ │ ├── base.date.less
│ │ ├── base.less
│ │ ├── base.time.less
│ │ ├── classic.date.less
│ │ ├── classic.less
│ │ ├── classic.time.less
│ │ ├── default.date.less
│ │ ├── default.less
│ │ ├── default.time.less
│ │ └── rtl.less
│ └── translations/
│ ├── FORMATTING.md
│ ├── NAMING.md
│ ├── ar.js
│ ├── bg_BG.js
│ ├── bs_BA.js
│ ├── ca_ES.js
│ ├── cs_CZ.js
│ ├── da_DK.js
│ ├── de_DE.js
│ ├── el_GR.js
│ ├── es_ES.js
│ ├── et_EE.js
│ ├── eu_ES.js
│ ├── fa_IR.js
│ ├── fi_FI.js
│ ├── fr_FR.js
│ ├── ge_GEO.js
│ ├── gl_ES.js
│ ├── he_IL.js
│ ├── hi_IN.js
│ ├── hr_HR.js
│ ├── hu_HU.js
│ ├── id_ID.js
│ ├── is_IS.js
│ ├── it_IT.js
│ ├── ja_JP.js
│ ├── km_KH.js
│ ├── ko_KR.js
│ ├── lt_LT.js
│ ├── lv_LV.js
│ ├── nb_NO.js
│ ├── ne_NP.js
│ ├── nl_NL.js
│ ├── pl_PL.js
│ ├── pt_BR.js
│ ├── pt_PT.js
│ ├── ro_RO.js
│ ├── ru_RU.js
│ ├── sk_SK.js
│ ├── sl_SI.js
│ ├── sr_RS_cy.js
│ ├── sr_RS_lt.js
│ ├── sv_SE.js
│ ├── th_TH.js
│ ├── tr_TR.js
│ ├── uk_UA.js
│ ├── vi_VN.js
│ ├── zh_CN.js
│ └── zh_TW.js
├── package.json
├── tests/
│ ├── dev/
│ │ ├── date.htm
│ │ └── time.htm
│ └── units/
│ ├── all.htm
│ ├── base.js
│ ├── date.js
│ └── time.js
├── version-bump.js
└── version-commit.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.DS_Store
*.sublime-project
*.sublime-workspace
node_modules/*
*.log
.idea/
================================================
FILE: .jshintrc
================================================
{
"debug": true,
"devel": true,
"browser": true,
"asi": true,
"unused": true,
"eqnull": true
}
================================================
FILE: .travis.yml
================================================
language: node_js
node_js:
- 8
before_script:
- npm install -g grunt-cli
before_install: npm install -g npm@latest
install: npm ci
================================================
FILE: CHANGELOG.md
================================================
# Changelog
## 3.5.6
- [#667](https://github.com/amsul/pickadate.js/issues/667) Fixed issue where script was executed before `body` was loaded.
- [#648](https://github.com/amsul/pickadate.js/issues/648) Fixed re-binding events to `P.$holder` after a re-render.
- [#652](https://github.com/amsul/pickadate.js/issues/652) Added Persian translations.
- [#669](https://github.com/amsul/pickadate.js/issues/669) Fix in Chinese translations.
- [#683](https://github.com/amsul/pickadate.js/issues/683) Fix in Japanese translations.
## 3.5.5
- [#180](https://github.com/amsul/pickadate.js/issues/180) Fixed date picker to use UTC dates.
- [#503](https://github.com/amsul/pickadate.js/issues/503) Fixed time picker to use local times.
- Fixed color for “clear” button on time picker.
- Translations fixes for [Italian](https://github.com/amsul/pickadate.js/issues/507), [Slovak](https://github.com/amsul/pickadate.js/issues/505), [French](https://github.com/amsul/pickadate.js/issues/499), [Russian](https://github.com/amsul/pickadate.js/issues/484), [Spanish](https://github.com/amsul/pickadate.js/issues/482), [Hindi](https://github.com/amsul/pickadate.js/commit/4b7b7194395657b2360c335839f5b4e21f43987a), [Brazilian Portuguese](https://github.com/amsul/pickadate.js/commit/67d0f6d26aba689c31c9ad402a109b478ffdac92)
- [#437](https://github.com/amsul/pickadate.js/issues/437): Added Common JS to UMD.
- [#478](https://github.com/amsul/pickadate.js/issues/478): Added “close” button.
- [#406](https://github.com/amsul/pickadate.js/issues/406): Allow `clear` method to be `muted`.
- [#510](https://github.com/amsul/pickadate.js/issues/510): Added `valueSubmit` to get value of hidden input element.
- [#439](https://github.com/amsul/pickadate.js/issues/439): Added ability to set min/max date & time using formatted strings.
- [#451](https://github.com/amsul/pickadate.js/issues/451): Added French accessibility labels.
- [#462](https://github.com/amsul/pickadate.js/issues/462): Fixed time offset issues by using UTC based times.
- [#476](https://github.com/amsul/pickadate.js/issues/476): Fixed the `main` files in `bower.json`.
- [#442](https://github.com/amsul/pickadate.js/issues/442): Fixed flickering on webkit browsers.
- [#438](https://github.com/amsul/pickadate.js/issues/438): Fixed adding an ID to the hidden element to remain unique.
- [#456](https://github.com/amsul/pickadate.js/issues/456): Fixed “today” button to be disabled when the date is disabled.
- [#419](https://github.com/amsul/pickadate.js/issues/419): Fixed time picker not scrolling to correct position with the “classic” theme.
- [#531](https://github.com/amsul/pickadate.js/issues/531): Fixed mutation of date object passed to `normalize`.
- [#441](https://github.com/amsul/pickadate.js/issues/441): Fixed IE8 `getComputedStyle` error.
- [#465](https://github.com/amsul/pickadate.js/issues/465): Fixed IE8 error on changing input `type`.
- [#519](https://github.com/amsul/pickadate.js/issues/519): Fixed IE8 error of picker in `iframe`.
- [#523](https://github.com/amsul/pickadate.js/issues/523): Fixed iOS8 bug of picker not opening in view.
- Fixed bug where it was possible to unbind internal bindings.
- [#420](https://github.com/amsul/pickadate.js/issues/420): [Updated docs](http://amsul.github.io/pickadate.js/api.htm#method-trigger) the `trigger` method’s ability to pass data to event callbacks.
- [#562](https://github.com/amsul/pickadate.js/issues/562): Fixed hidden `input` to move into `container` when option is used.
- [#581](https://github.com/amsul/pickadate.js/issues/581): Added ARIA label for dates and times.
- [#575](https://github.com/amsul/pickadate.js/issues/575): Removed the Sizzle dependency.
- Added `closeOnSelect` and `closeOnClear` boolean options.
## 3.5.2
- [#398](https://github.com/amsul/pickadate.js/issues/398): Fixed Nepali translations.
- [#403](https://github.com/amsul/pickadate.js/issues/403): Fixed month nav pointer styling with Bootstrap (`border-box` issue).
- [#405](https://github.com/amsul/pickadate.js/issues/405): Fixed scrollbar width checker.
- [#421](https://github.com/amsul/pickadate.js/issues/421): Fixed `picker.get('select', 'yyyy-mm-dd')` when `select` is `null`.
- [#423](https://github.com/amsul/pickadate.js/issues/423): Added Vietnamese translations.
- [#427](https://github.com/amsul/pickadate.js/issues/427): Fixed enabling date when `firstDay` is set.
- [#428](https://github.com/amsul/pickadate.js/issues/428): Fixed `$` conflict in Arabic translations.
- [#430](https://github.com/amsul/pickadate.js/issues/430): Improved differentiation between “selected” and “highlighted” dates/times.
## 3.5.0
- [#162](https://github.com/amsul/pickadate.js/issues/162): Fixed page scrolling issue when modal view is open in the default theme.
- [#350](https://github.com/amsul/pickadate.js/issues/350): Fixed Hungarian translations typo.
- [#351](https://github.com/amsul/pickadate.js/issues/351) & [#388](https://github.com/amsul/pickadate.js/issues/388) & [#393](https://github.com/amsul/pickadate.js/issues/393): Fixed issue with script freezing when `min` is `true` and “today” is disabled.
- [#358](https://github.com/amsul/pickadate.js/issues/358): Fixed parsing months as 1-indexed when value is a string.
- [#360](https://github.com/amsul/pickadate.js/issues/360): Improved Grunt script to build a cleaner project.
- [#361](https://github.com/amsul/pickadate.js/issues/361): Fixed alternate API syntax not returning the correct value.
- [#367](https://github.com/amsul/pickadate.js/issues/367): [Added a note](http://amsul.github.io/pickadate.js/date.htm#formatting-rules) on how to appropriately use the `yy` format.
- [#369](https://github.com/amsul/pickadate.js/issues/369): Added Nepali translations.
- [#377](https://github.com/amsul/pickadate.js/issues/377): Added the [`hiddenName` option](http://amsul.github.io/pickadate.js/date.htm#formats_use_hidden_only) to use the visible `input`’s name as the hidden `input`’s name.
- [#381](https://github.com/amsul/pickadate.js/issues/381): Added missing semi-colon to `legacy.js`.
- [#384](https://github.com/amsul/pickadate.js/issues/384): Year selector appears *before* the month selector.
- [#387](https://github.com/amsul/pickadate.js/issues/387): Fixed issue where the `clear` method did not reset the `select` value to `null`.
- [#395](https://github.com/amsul/pickadate.js/issues/395): [Added a note](http://amsul.github.io/pickadate.js/api.htm#method-open-close) on how to use a separate button to open/close the picker.
## 3.4.0
- ARIA support added. :star2:
- [#128](https://github.com/amsul/pickadate.js/issues/128): Date parser recognizes a string value and uses month index as 1.
- [#316](https://github.com/amsul/pickadate.js/issues/316): Date and time parser fall back to default format if none is specified.
- [#326](https://github.com/amsul/pickadate.js/issues/326): Fixed `set('disable', true)` crashing with `max: true` in options.
- [#329](https://github.com/amsul/pickadate.js/issues/329): Fixed time picker not parsing midnight correcly.
- [#325](https://github.com/amsul/pickadate.js/issues/325): Fixed Firefox bug with querying for active element with `$.contains`.
- [#330](https://github.com/amsul/pickadate.js/issues/330): Fixed month selector navigation from month with more days to one with less.
- [#332](https://github.com/amsul/pickadate.js/issues/332): Fixed issue where right-clicks caused picker to close in Firefox.
- [#338](https://github.com/amsul/pickadate.js/issues/338): Fixed IE issue with month & year selector not working correctly.
- Improved time picker setting a time relative to “now”.
- Improved disabling/enabling dates and times.
- Spanish translations typo fixed.
- Added [the `off` method](http://amsul.github.io/pickadate.js/api.htm#method-off).
- Added Galician translations.
- Added Slovenian translations.
- Added Icelandic translations.
- Added option to disable [dates](http://amsul.github.io/pickadate.js/date.htm#disable-dates-use-ranges) & [times](http://amsul.github.io/pickadate.js/time.htm#disable-times-use-ranges) within a range.
- Added option to set the [`select`](http://amsul.github.io/pickadate.js/api.htm#method-set-select-date), [`highlight`](http://amsul.github.io/pickadate.js/api.htm#method-set-highlight-date), and [`view`](http://amsul.github.io/pickadate.js/api.htm#method-set-view-date) using a string and parsing format.
- Added some performance improvents.
- Added more tests and documentation.
- Fixed `picker.get('select')` when there’s no value.
## 3.3.2
- [#283](https://github.com/amsul/pickadate.js/issues/283): Adjusted font size for narrow screens.
- [#285](https://github.com/amsul/pickadate.js/issues/285): Fixed `select` menu click on Firefox.
- [#294](https://github.com/amsul/pickadate.js/issues/294): Fixed issue with `stop` method called within `onClose`.
- [#303](https://github.com/amsul/pickadate.js/issues/303): Fixed issue with `value` not being parsed when `formatSubmit` is used.
## 3.3.1
- [#260](https://github.com/amsul/pickadate.js/issues/260): Fixed border from preventing picker from opening.
- [#248](https://github.com/amsul/pickadate.js/issues/248): Added option to enable dates/times disabled within a range.
- [#255](https://github.com/amsul/pickadate.js/issues/255): Added traditional Chinese.
- [#249](https://github.com/amsul/pickadate.js/issues/249) & [#120](https://github.com/amsul/pickadate.js/issues/120): Fixed jQuery Mobile and MagnificPopup click issues.
- [#247](https://github.com/amsul/pickadate.js/issues/247): Fixed setting min limit on time picker.
- [#278](https://github.com/amsul/pickadate.js/issues/278) & [#285](https://github.com/amsul/pickadate.js/issues/285): Fixed Firefox and IE bug for finding `activeElement`.
- [#279](https://github.com/amsul/pickadate.js/issues/279): Added option to `set` things with [muted callbacks](http://amsul.github.io/pickadate.js/pickadate.js/api.htm#muted-callbacks).
- Fixed French translations capitalization.
- Fixed time picker scrolling.
- Added setting a [time using a native JavaScript date objects](http://amsul.github.io/pickadate.js/api.htm#method-set-select-time).
- Added option to keep an [editable `input`](http://amsul.github.io/pickadate.js/date.htm#editable) element.
## 3.3.0
- [#238](https://github.com/amsul/pickadate.js/issues/238): Improved disabled dates validation.
- [#236](https://github.com/amsul/pickadate.js/issues/236): Fixed transparency issue in IE8 on XP.
- [#159](https://github.com/amsul/pickadate.js/issues/159): Added functionality to reset disabled dates/times.
- [#232](https://github.com/amsul/pickadate.js/issues/232): Dropdown styling tweaked.
- [#197](https://github.com/amsul/pickadate.js/issues/197): Fixed issue with forms not submitting on Firefox.
- [#230](https://github.com/amsul/pickadate.js/issues/230): Fixed issue with selected time scrolling into view.
- [#208](https://github.com/amsul/pickadate.js/issues/208) & [#209](https://github.com/amsul/pickadate.js/issues/209): Added `hiddenPrefix` option for hidden input element’s name attribute.
- [#130](https://github.com/amsul/pickadate.js/issues/130): Fixed issue with passing focus to an element with custom jQuery builds.
- [#246](https://github.com/amsul/pickadate.js/issues/246) & [#242](https://github.com/amsul/pickadate.js/issues/242): Resolved jQuery conflict.
- [#247](https://github.com/amsul/pickadate.js/issues/247): Fixed issue with time picker intervals and the min selectable time.
- Added option to disabled/enable dates using JavaScript Date objects.
- Tweaked functionality in enabling/disabling dates and times.
- Improved support for RTL languages and keyboard navigation.
- Added `rtl.css` for styling RTL languages appropriatey.
## 3.2.2
- [#216](https://github.com/amsul/pickadate.js/issues/216): Added generic Arabic translations.
- [#210](https://github.com/amsul/pickadate.js/issues/210): Fixed jQuery conflict in picker extension files.
- [#223](https://github.com/amsul/pickadate.js/issues/223): Time picker “disabled” attribute fix.
- Fixed issue with IE losing key bindings when clicked within picker.
- Improved delegated click handling on picker elements.
## 3.2.1
- [#210](https://github.com/amsul/pickadate.js/issues/210): Wrapped files using UMD patterns.
- [#207](https://github.com/amsul/pickadate.js/issues/207): Japanese translations added.
- Some other slight improvements.
## 3.2.0
- [#178](https://github.com/amsul/pickadate.js/issues/178): Fix for flicker on iOS while changing months.
- Added `render(true)` option to render full picker or just the “face” ([read more](http://amsul.github.io/pickadate.js/api.htm#method-render)).
## 3.1.4
- Fix for Polish translation.
- Added a `container` option to specify the picker root element’s outlet.
- Fix for `$` conflict in translation files.
## 3.1.3
- Korean translations added.
## 3.1.2
- [#168](https://github.com/amsul/pickadate.js/issues/168): Fixed month navigation with disabled dates.
## 3.1.1
- [#161](https://github.com/amsul/pickadate.js/issues/161): Corrected “no-drop” cursor on input element for certain browsers.
- [#158](https://github.com/amsul/pickadate.js/issues/158): Fixed CSS for disabled dates with unfocused input.
- [#155](https://github.com/amsul/pickadate.js/issues/155): Corrected unescaped translations.
## 3.1.0
- [#140](https://github.com/amsul/pickadate.js/issues/140): Fix for freezing with unexpected date format.
- [#154](https://github.com/amsul/pickadate.js/issues/154): Fix for “mm” and “m” formats opening with incorrect month.
- Border styling adjusted for disabled times.
## v3.0.5
- [#145](https://github.com/amsul/pickadate.js/issues/145): Fix for `getFirstWordLength` not being defined.
- [#137](https://github.com/amsul/pickadate.js/issues/137): Corrected Norwegian translation.
## v3.0.4
- [#132](https://github.com/amsul/pickadate.js/issues/132): Fix for using `firstDay` with month starting on Sunday.
- Improved disabled dates validation.
## v3.0.3
- [#126](https://github.com/amsul/pickadate.js/issues/126): Fix for all dates disabled.
- [#127](https://github.com/amsul/pickadate.js/issues/127): Fix for jQuery no conflict.
- [#129](https://github.com/amsul/pickadate.js/issues/129): Fix for month nav wrapping around same year.
## v3.0.2
- [#124](https://github.com/amsul/pickadate.js/issues/124): Fixed bug with navigating past year.
## v3.0.1
- [#123](https://github.com/amsul/pickadate.js/issues/123): Removed `hiddenSuffix` extra quote character.
- Fixed issue with month navigation on the 31st date.
## v3.0.0
With this major release, the entire API has been rethought to allow the picker to be much more configurable and extensible. These are the most notable updates:
- [#20](https://github.com/amsul/pickadate.js/issues/20): Introduced a new [time picker](http://amsul.github.io/pickadate.js/time.htm).
- [#112](https://github.com/amsul/pickadate.js/issues/112): Firefox select month/year fix.
- [#84](https://github.com/amsul/pickadate.js/issues/84): Scrollbar not hidden to avoid page shift.
- [#89](https://github.com/amsul/pickadate.js/issues/89): Better event handling on clicks/focuses/keydowns within the holder.
- [#98](https://github.com/amsul/pickadate.js/issues/98): Destroy picker data from element.
- Added Grunt.js build system.
- Added QUnit test suite.
- Added Travis integration.
- Updated themes to be LESS-based.
- Removed “inline” and “inline-fixed” themes.
- Removed jam.js bindings within `package.json`.
- Removed official support for IE7. Still works but looks odd.
To enable all this goodness, some **backward-incompatible changes** have been introduced. These are the main ones:
<a name="zero-as-index"></a>
- [#85](https://github.com/amsul/pickadate.js/issues/85): Months have __zero-as-index__:
Just as in JavaScript’s native Date object, the `month` used to create dates is now based on zero as the first index. Meaning:
```
[2013,0,1] → January 01, 2013
[2013,11,1] → December 01, 2013
```
- API revised:
```
isOpen → get('open')
getDate → get('select')
getDateLimit → get('min') or get('max')
setDate → set('select', …)
setDateLimit → set('min', …) or set('max', …)
show → set('view', …)
```
- Options revised:
```
showMonthsFull → showMonthsShort
showWeekdaysShort → showWeekdaysFull
yearSelector → selectYears
monthSelector → selectMonths
dateMin → min
dateMax → max
datesDisabled → disable
onSelect → onSet
```
- Options removed:
```
monthPrev
monthNext
```
To add labels for the month navigation tabs, use CSS pseudo-elements instead.
- A few [HTML classes](http://amsul.github.io/pickadate.js/date.htm#classes) name and property changes.
- [Formatting rules](http://amsul.github.io/pickadate.js/date.htm#formats) that appear within a word need to be escaped with an exclamation mark (!).
<br>
#### Please do read the [docs](http://amsul.github.io/pickadate.js/date.htm#options) and [api](http://amsul.github.io/pickadate.js/api.htm) to see exactly how these new options and methods work.
<br>
## Older changelogs
If you’re looking for changes in older versions, please [browse the tags](https://github.com/amsul/pickadate.js/tags) for the relevant commit archive and changelog file.
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Want to help contribute something to the project? Awesome! :smile:
Please take a moment to review this doc to make contributions easy and effective for everyone.
If there’s anything you’d like to discuss before diving in, you can find us on Gitter.
[](https://gitter.im/amsul/pickadate.js)
<a name="bugs"></a>
## Bug reports
If you believe you’ve found a bug within the repository code:
- Search the existing issues to avoid duplicates and to check if it has already been solved.
- Make sure you’re using the latest build.
- Isolate the problem and create a [reduced test case](http://css-tricks.com/6263-reduced-test-cases/) - preferably supported with a live example.
- Try to be as detailed as possible in the report (OS, browser, expected outcome vs actual outcome, etc).
- Please **do not** use the issue tracker for personal support requests. Instead try [Stack Overflow](http://stackoverflow.com/questions/tagged/pickadate) or the likes with a `pickadate` tag.
<a name="pull-requests"></a>
## Pull requests
If you’re submitting a pull request, please respect the coding standards used (indentations, comments, semi-colons, etc) as per the **Golden Rule**:
> All code in any code base should look like a single person typed it, no matter how many people contributed.
A few other things to keep in mind:
- Make sure the changes are suitable within the scope of this project.
- Discuss any significant features before endeavoring into developing them. I’d hate to have anyone spend effort on something only for me to not merge it into the main project.
- Include the relevant test coverage if any JavaScript files are involved.
- Compile the project using `grunt build --verbose` to make sure everything passes with a green flag.
- Use the Semantic Versioning guide, as mentioned in the [readme file](https://github.com/amsul/pickadate.js/#readme), in the case that a version bump is due.
#### All pull requests should be submitted to the `master` branch.
<a name="features"></a>
## Feature requests
Feature requests are welcome. But take a moment to find out whether your idea fits within the scope and aims of this project. It’s up to *you* to make a strong case to the merits of this feature. Please provide as much detail and context as possible.
================================================
FILE: Gruntfile.js
================================================
/*!
* This Gruntfile is used to build the project files.
*/
/*jshint
node: true
*/
module.exports = function( grunt ) {
// Read the package manifest.
var packageJSON = grunt.file.readJSON( 'package.json' )
// Load the NPM tasks.
grunt.loadNpmTasks( 'grunt-contrib-watch' )
grunt.loadNpmTasks( 'grunt-contrib-jshint' )
grunt.loadNpmTasks( 'grunt-contrib-qunit' )
grunt.loadNpmTasks( 'grunt-contrib-less' )
grunt.loadNpmTasks( 'grunt-contrib-cssmin' )
grunt.loadNpmTasks( 'grunt-contrib-uglify' )
grunt.loadNpmTasks( 'grunt-autoprefixer' )
// Setup the initial configurations.
grunt.initConfig({
// Add the package data.
pkg: packageJSON,
// Set up the directories.
dirs: {
tests: 'tests',
lib: {
src: 'lib',
min: 'lib/compressed'
},
themes: {
src: 'lib/themes-source',
dest: 'lib/themes',
min: 'lib/compressed/themes'
},
translations: {
src: 'lib/translations',
min: 'lib/compressed/translations'
},
},
// Compile LESS into CSS.
less: {
options: {
style: 'expanded'
},
themes: {
files: {
'<%= dirs.themes.dest %>/default.css': [ '<%= dirs.themes.src %>/base.less', '<%= dirs.themes.src %>/default.less' ],
'<%= dirs.themes.dest %>/classic.css': [ '<%= dirs.themes.src %>/base.less', '<%= dirs.themes.src %>/classic.less' ],
'<%= dirs.themes.dest %>/default.date.css': [ '<%= dirs.themes.src %>/base.date.less', '<%= dirs.themes.src %>/default.date.less' ],
'<%= dirs.themes.dest %>/default.time.css': [ '<%= dirs.themes.src %>/base.time.less', '<%= dirs.themes.src %>/default.time.less' ],
'<%= dirs.themes.dest %>/classic.date.css': [ '<%= dirs.themes.src %>/base.date.less', '<%= dirs.themes.src %>/classic.date.less' ],
'<%= dirs.themes.dest %>/classic.time.css': [ '<%= dirs.themes.src %>/base.time.less', '<%= dirs.themes.src %>/classic.time.less' ],
'<%= dirs.themes.dest %>/rtl.css': [ '<%= dirs.themes.src %>/rtl.less' ]
}
}
},
// Lint the files.
jshint: {
options: {
jshintrc: true
},
gruntfile: 'Gruntfile.js',
lib: [
'<%= dirs.tests %>/units/*.js',
'<%= dirs.lib.src %>/**/*.js',
// Ignore the legacy and minified files.
'!<%= dirs.lib.src %>/legacy.js',
'!<%= dirs.lib.src %>/compressed/**/*.js'
]
},
// Minify all the things!
uglify: {
options: {
preserveComments: 'some'
},
lib: {
files: [
{
expand : true,
cwd : '<%= dirs.lib.src %>',
src : [ '**/*.js', '!compressed/**/*.js' ],
dest : '<%= dirs.lib.min %>'
}
]
}
},
cssmin: {
lib: {
expand: true,
cwd: '<%= dirs.themes.dest %>',
src: [ '**/*.css', '!compressed/**/*.css' ],
dest: '<%= dirs.themes.min %>'
}
},
// Prefix the styles.
autoprefixer: {
options: {
browsers: [ '> 5%', 'last 2 versions', 'ie 8', 'ie 9' ]
},
themes: {
src: '<%= dirs.themes.dest %>/**/*.css'
},
},
// Unit test the files.
qunit: {
lib: [ '<%= dirs.tests %>/units/all.htm' ]
},
// Watch the project files.
watch: {
develop: {
files: [
'<%= dirs.themes.src %>/**/*.less'
],
tasks: [ 'develop-once' ]
},
}
}) //grunt.initConfig
// Register the tasks.
grunt.registerTask( 'default', [ 'develop' ] )
grunt.registerTask( 'develop', [ 'develop-once', 'watch:develop' ] )
grunt.registerTask( 'develop-once', [ 'less:themes', 'autoprefixer:themes' ] )
grunt.registerTask( 'package', [ 'develop-once', 'uglify', 'cssmin' ] )
grunt.registerTask( 'test', [ 'jshint', 'qunit' ] )
} //module.exports
================================================
FILE: LICENSE.md
================================================
Copyright 2014 Amsul, http://amsul.ca
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================
# pickadate [](https://travis-ci.org/amsul/pickadate.js) [](https://www.jsdelivr.com/package/npm/pickadate)
The mobile-friendly, responsive, and lightweight jQuery date & time input picker.
[](https://spectrum.chat/pickadate)
#### To get started, check out the:
[Homepage](http://amsul.ca/pickadate.js) - [Date picker](http://amsul.ca/pickadate.js/date) - [Time picker](http://amsul.ca/pickadate.js/time) - [API](http://amsul.ca/pickadate.js/api)
#### To get it:
[Download the latest stable build](https://github.com/amsul/pickadate.js/archive/master.zip)
*or*
`git clone git://github.com/amsul/pickadate.js.git`
*or*
`bower install pickadate`
<br>
## Library files
The `lib` folder includes the library files with a `compressed` folder containing the minified counter-parts. These files are minified using [Grunt](#building-with-grunt).
### Pickers
There are three picker files:
* `picker.js` The core file (required before any other picker)
* `picker.date.js` The date picker
* `picker.time.js` The time picker
_To support old browsers, namely IE8, **also include** the `legacy.js` file._
### Themes
All themes are [generated using LESS](#less-styling) and compiled from the `lib/themes-source` folder into the `lib/themes` folder.
There are two themes:
* `default.css` The default modal-style theme
* `classic.css` The classic dropdown-style theme
Based on the theme, pick the relevant picker styles:
* `default.date.css` and `default.time.css` when using the default theme
* `classic.date.css` and `classic.time.css` when using the classic theme
__**__ For languages with text flowing from right-to-left, also include the `rtl.css` stylesheet.
### Translations
The translations live in the `lib/translations` folder. There are currently [43 language translations](https://github.com/amsul/pickadate.js/tree/master/lib/translations) included.
<br>
## Building with Grunt
[Grunt](http://gruntjs.com/) `~0.4.5` is used to build the project files. To get started, clone the project and then run:
- `npm install` to get the required node modules.
- `grunt test --verbose` to confirm you have all the dependencies.
Type out `grunt --help` to see a list of all the tasks available. The generally used tasks are:
- `grunt develop` compiles the LESS files and watches for any source changes.
- `grunt package` compiles and then minifies the source files.
- `grunt test` tests the entire package.
<br>
<a name="less-styling"></a>
## Styling with LESS
The picker themes are built using [LESS](http://lesscss.org/) with Grunt. To customize the CSS output, read the `_variables.less` file in the `lib/themes-source` folder. You can specify:
- colors for the theme,
- sizes for the picker,
- media-query breakpoints,
- and a whole bunch of other stuff.
Make sure to run the `grunt develop` task before making any changes to compile it into CSS.
<br>
## Bugs
Before opening a new issue, please search the existing [Issues](https://github.com/amsul/pickadate.js/issues) for anything similar – there might already be an answer to your problem. You might also wanna check out the [Contributing](https://github.com/amsul/pickadate.js/blob/master/CONTRIBUTING.md) guide.
<br>
## Contributing
Before contributing any code to the project, please take a look at the [Contributing](https://github.com/amsul/pickadate.js/blob/master/CONTRIBUTING.md) guide.
If there’s anything you’d like to discuss, we like to hang out on Spectrum.
[](https://spectrum.chat/pickadate)
<br>
## Support
If you find this library useful and would like to see further development, consider [supporting it](http://selz.co/1g80kCZ).
<br><br>
---
© 2014 [Amsul](http://twitter.com/amsul_)
Licensed under [MIT](http://amsul.ca/MIT)
================================================
FILE: bower.json
================================================
{
"name": "pickadate",
"description": "The mobile-friendly, responsive, and lightweight jQuery date & time input picker.",
"main": [
"lib/picker.js",
"lib/picker.date.js",
"lib/picker.time.js",
"lib/themes/default.css",
"lib/themes/default.date.css",
"lib/themes/default.time.css"
],
"license": "MIT",
"ignore": [
"*.md",
"*.htm",
"_docs",
"demo"
],
"keywords": [
"date",
"time",
"picker",
"input",
"responsive"
],
"authors": {
"name": "Amsul",
"email": "reach@amsul.ca",
"homepage": "http://amsul.ca"
},
"homepage": "http://amsul.ca/pickadate.js",
"repository": {
"type": "git",
"url": "git://github.com/amsul/pickadate.js.git"
},
"dependencies": {
"jquery": ">=1.7"
},
"devDependencies": {
"grunt": "^0.4.5",
"grunt-autoprefixer": "^1.0.1",
"grunt-contrib-copy": "^0.5.0",
"grunt-contrib-cssmin": "^0.9.0",
"grunt-contrib-jshint": "^0.10.0",
"grunt-contrib-less": "^0.11.4",
"grunt-contrib-qunit": "^0.4.0",
"grunt-contrib-uglify": "^0.4.1",
"grunt-contrib-watch": "^0.6.1",
"phantomjs": "^1.9.7-5",
"zlib-browserify": "0.0.3"
}
}
================================================
FILE: lib/compressed/legacy.js
================================================
/*!
* Legacy browser support
*/
[].map||(Array.prototype.map=function(a,b){for(var c=this,d=c.length,e=new Array(d),f=0;f<d;f++)f in c&&(e[f]=a.call(b,c[f],f,c));return e}),[].filter||(Array.prototype.filter=function(a){if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=[],e=arguments[1],f=0;f<c;f++)if(f in b){var g=b[f];a.call(e,g,f,b)&&d.push(g)}return d}),[].indexOf||(Array.prototype.indexOf=function(a){if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!==d&&d!=1/0&&d!=-1/0&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);e<c;e++)if(e in b&&b[e]===a)return e;return-1});/*!
* Cross-Browser Split 1.1.1
* Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
* Available under the MIT License
* http://blog.stevenlevithan.com/archives/cross-browser-split
*/
var nativeSplit=String.prototype.split,compliantExecNpcg=void 0===/()??/.exec("")[1];String.prototype.split=function(a,b){var c=this;if("[object RegExp]"!==Object.prototype.toString.call(a))return nativeSplit.call(c,a,b);var d,e,f,g,h=[],i=(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.extended?"x":"")+(a.sticky?"y":""),j=0;for(a=new RegExp(a.source,i+"g"),c+="",compliantExecNpcg||(d=new RegExp("^"+a.source+"$(?!\\s)",i)),b=void 0===b?-1>>>0:b>>>0;(e=a.exec(c))&&!((f=e.index+e[0].length)>j&&(h.push(c.slice(j,e.index)),!compliantExecNpcg&&e.length>1&&e[0].replace(d,function(){for(var a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(e[a]=void 0)}),e.length>1&&e.index<c.length&&Array.prototype.push.apply(h,e.slice(1)),g=e[0].length,j=f,h.length>=b));)a.lastIndex===e.index&&a.lastIndex++;return j===c.length?!g&&a.test("")||h.push(""):h.push(c.slice(j)),h.length>b?h.slice(0,b):h};
================================================
FILE: lib/compressed/picker.date.js
================================================
/*!
* Date picker for pickadate.js v3.6.4
* http://amsul.github.io/pickadate.js/date.htm
*/
!function(a){"function"==typeof define&&define.amd?define(["./picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return!0===a[0]?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h,defaultValue:!0}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var f,g=this;return c=void 0===c?a:c,c==-1/0||c==1/0?f=c:b.isPlainObject(c)&&e.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=e.isDate(c)?c:g.create().obj):c=e.isInteger(c)||e.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:f||c.getFullYear(),month:f||c.getMonth(),date:f||c.getDate(),day:f||c.getDay(),obj:f||c,pick:f||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,f=function(a){return!0===a||b.isArray(a)||e.isDate(a)?d.create(a):a};return e.isInteger(a)||(a=f(a)),e.isInteger(c)||(c=f(c)),e.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:e.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:f(a),to:f(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return e.isInteger(b)?b=c.now(a,b,{rel:b}):b?"string"==typeof b&&(b=c.parse(a,b)):b="min"==a?-1/0:1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var f,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;d<c.pick?f=!0:d>c.pick&&(g=!0)}return e.isInteger(a)}).length;if((!d||!d.nav&&!d.defaultValue)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||f||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!f&&l<0)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.month<k.month||c.month>k.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return e.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||e.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,f={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?e.trigger(c,d,[b,f]):a.replace(/^!/,"").length;c&&(f[a]=b.substr(0,g)),b=b.substr(g)}),[f.yyyy||f.yy,+(f.mm||f.m)-1,f.dd||f.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/[^\x00-\x7F]+|\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?e.digits(a):b.date},dd:function(a,b){return a?2:e.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?e.digits(a):b.month+1},mm:function(a,b){return a?2:e.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return e.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return e.isInteger(a)&&e.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(e.isDate(a)||b.isArray(a))&&(e.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to)},c.prototype.isDateOverlap=function(a,c){var d=this,f=d.settings.firstDay?1:0;return e.isInteger(a)&&(e.isDate(c)||b.isArray(c))?(a=a%7+f)===d.create(c).day+1:e.isInteger(c)&&(e.isDate(a)||b.isArray(a))?(c=c%7+f)===d.create(a).day+1:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.overlapRanges(a,c)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,f=d.item.disable.slice(0);return"flip"==c?d.flipEnable():!1===c?(d.flipEnable(1),f=[]):!0===c?(d.flipEnable(-1),f=[]):c.map(function(a){for(var c,g=0;g<f.length;g+=1)if(d.isDateExact(a,f[g])){c=!0;break}c||(e.isInteger(a)||e.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&f.push(a)}),f},c.prototype.activate=function(a,c){var d=this,f=d.item.disable,g=f.length;return"flip"==c?d.flipEnable():!0===c?(d.flipEnable(1),f=[]):!1===c?(d.flipEnable(-1),f=[]):c.map(function(a){var c,h,i,j;for(i=0;i<g;i+=1){if(h=f[i],d.isDateExact(h,a)){c=f[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):e.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;i<g;i+=1)if(d.isDateExact(f[i],a)){f[i]=null;break}if(j)for(i=0;i<g;i+=1)if(d.isDateOverlap(f[i],a)){f[i]=null;break}c&&f.push(c)}),f.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,f=b.item,g=f.now,h=f.select,i=f.highlight,j=f.view,k=f.disable,l=f.min,m=f.max,n=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),e.node("thead",e.node("tr",e.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysShort).slice(0),c.weekdaysFull.slice(0)),o=function(a){return e.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&j.year>=m.year&&j.month>=m.month||!a&&j.year<=l.year&&j.month<=l.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+e.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},p=function(){var d=c.showMonthsShort?c.monthsShort:c.monthsFull;return c.selectMonths?e.node("select",e.group({min:0,max:11,i:1,node:"option",item:function(a){return[d[a],0,"value="+a+(j.month==a?" selected":"")+(j.year==l.year&&a<l.month||j.year==m.year&&a>m.month?" disabled":"")]}}),c.klass.selectMonth,(a?"":"disabled")+" "+e.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):e.node("div",d[j.month],c.klass.month)},q=function(){var d=j.year,f=!0===c.selectYears?5:~~(c.selectYears/2);if(f){var g=l.year,h=m.year,i=d-f,k=d+f;if(g>i&&(k+=g-i,i=g),h<k){var n=i-g,o=k-h;i-=n>o?o:n,k=h}return e.node("select",e.group({min:i,max:k,i:1,node:"option",item:function(a){return[a,0,"value="+a+(d==a?" selected":"")]}}),c.klass.selectYear,(a?"":"disabled")+" "+e.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return e.node("div",d,c.klass.year)};return e.node("div",(c.selectYears?q()+p():p()+q())+o()+o(1),c.klass.header)+e.node("table",n+e.node("tbody",e.group({min:0,max:5,i:1,node:"tr",item:function(a){var f=c.firstDay&&0===b.create([j.year,j.month,1]).day?-7:0;return[e.group({min:d*a-j.day+f+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([j.year,j.month,a+(c.firstDay?1:0)]);var d=h&&h.pick==a.pick,f=i&&i.pick==a.pick,n=k&&b.disabled(a)||a.pick<l.pick||a.pick>m.pick,o=e.trigger(b.formats.toString,b,[c.format,a]);return[e.node("div",a.date,function(b){return b.push(j.month==a.month?c.klass.infocus:c.klass.outfocus),g.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),f&&b.push(c.klass.highlighted),n&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+e.ariaAttr({role:"gridcell",label:o,selected:!(!d||b.$node.val()!==o)||null,activedescendant:!!f||null,disabled:!!n||null})),"",e.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+e.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0}))+e.node("div",e.node("button",c.today,c.klass.buttonToday,"type=button data-pick="+g.pick+(a&&!b.disabled(g)?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id}))+e.node("button",c.clear,c.klass.buttonClear,"type=button data-clear=1"+(a?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id}))+e.node("button",c.close,c.klass.buttonClose,"type=button data-close=true "+(a?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],today:"Today",clear:"Clear",close:"Close",closeOnSelect:!0,closeOnClear:!0,updateInput:!0,format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)});
================================================
FILE: lib/compressed/picker.js
================================================
/*!
* pickadate.js v3.6.4, 2019/05/25
* By Amsul, http://amsul.ca
* Hosted on http://amsul.github.io/pickadate.js
* Licensed under MIT
*/
!function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):"object"==typeof window?window.Picker=a(jQuery):this.Picker=a(jQuery)}(function(a){function b(g,h,j,l){function n(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",B.component.nodes(w.open),y.box),y.wrap),y.frame),y.holder,'tabindex="-1"')}function o(){z.data(h,B).addClass(y.input).val(z.data("value")?B.get("select",x.format):g.value).on("focus."+w.id+" click."+w.id,function(a){a.preventDefault(),B.open()}).on("mousedown",function(){w.handlingOpen=!0;var b=function(){setTimeout(function(){a(document).off("mouseup",b),w.handlingOpen=!1},0)};a(document).on("mouseup",b)}),x.editable||z.on("keydown."+w.id,u),f(g,{haspopup:!0,expanded:!1,readonly:!1,owns:g.id+"_root"})}function p(){f(B.$root[0],"hidden",!0)}function q(){B.$holder.on({keydown:u,"focus.toOpen":t,blur:function(){z.removeClass(y.target)},focusin:function(a){B.$root.removeClass(y.focused),a.stopPropagation()},"mousedown click":function(b){var c=e(b,g);c!=B.$holder[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),B.$holder.eq(0).focus()))}}).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(y.navDisabled)||b.hasClass(y.disabled),e=i();e=e&&(e.type||e.href?e:null),(d||e&&!a.contains(B.$root[0],e))&&B.$holder.eq(0).focus(),!d&&c.nav?B.set("highlight",B.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?(B.set("select",c.pick),x.closeOnSelect&&B.close(!0)):c.clear?(B.clear(),x.closeOnClear&&B.close(!0)):c.close&&B.close(!0)})}function r(){var b;!0===x.hiddenName?(b=g.name,g.name=""):(b=["string"==typeof x.hiddenPrefix?x.hiddenPrefix:"","string"==typeof x.hiddenSuffix?x.hiddenSuffix:"_submit"],b=b[0]+g.name+b[1]),B._hidden=a('<input type=hidden name="'+b+'"'+(z.data("value")||g.value?' value="'+B.get("select",x.formatSubmit)+'"':"")+">")[0],z.on("change."+w.id,function(){B._hidden.value=g.value?B.get("select",x.formatSubmit):""})}function s(){v&&m?B.$holder.find("."+y.frame).one("transitionend",function(){B.$holder.eq(0).focus()}):setTimeout(function(){B.$holder.eq(0).focus()},0)}function t(a){a.stopPropagation(),z.addClass(y.target),B.$root.addClass(y.focused),B.open()}function u(a){var b=a.keyCode,c=/^(8|46)$/.test(b);if(27==b)return B.close(!0),!1;(32==b||c||!w.open&&B.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?B.clear().close():B.open())}if(!g)return b;var v=!1,w={id:g.id||"P"+Math.abs(~~(Math.random()*new Date)),handlingOpen:!1},x=j?a.extend(!0,{},j.defaults,l):l||{},y=a.extend({},b.klasses(),x.klass),z=a(g),A=function(){return this.start()},B=A.prototype={constructor:A,$node:z,start:function(){return w&&w.start?B:(w.methods={},w.start=!0,w.open=!1,w.type=g.type,g.autofocus=g==i(),g.readOnly=!x.editable,g.id=g.id||w.id,"text"!=g.type&&(g.type="text"),B.component=new j(B,x),B.$root=a('<div class="'+y.picker+'" id="'+g.id+'_root" />'),p(),B.$holder=a(n()).appendTo(B.$root),q(),x.formatSubmit&&r(),o(),x.containerHidden?a(x.containerHidden).append(B._hidden):z.after(B._hidden),x.container?a(x.container).append(B.$root):z.after(B.$root),B.on({start:B.component.onStart,render:B.component.onRender,stop:B.component.onStop,open:B.component.onOpen,close:B.component.onClose,set:B.component.onSet}).on({start:x.onStart,render:x.onRender,stop:x.onStop,open:x.onOpen,close:x.onClose,set:x.onSet}),v=c(B.$holder[0]),g.autofocus&&B.open(),B.trigger("start").trigger("render"))},render:function(b){return b?(B.$holder=a(n()),q(),B.$root.html(B.$holder)):B.$root.find("."+y.box).html(B.component.nodes(w.open)),B.trigger("render")},stop:function(){return w.start?(B.close(),B._hidden&&B._hidden.parentNode.removeChild(B._hidden),B.$root.remove(),z.removeClass(y.input).removeData(h),setTimeout(function(){z.off("."+w.id)},0),g.type=w.type,g.readOnly=!1,B.trigger("stop"),w.methods={},w.start=!1,B):B},open:function(c){return w.open?B:(z.addClass(y.active),f(g,"expanded",!0),setTimeout(function(){B.$root.addClass(y.opened),f(B.$root[0],"hidden",!1)},0),!1!==c&&(w.open=!0,v&&a("body").css("overflow","hidden").css("padding-right","+="+d()),s(),k.on("click."+w.id+" focusin."+w.id,function(a){if(!w.handlingOpen){var b=e(a,g);a.isSimulated||b==g||b==document||3==a.which||B.close(b===B.$holder[0])}}).on("keydown."+w.id,function(c){var d=c.keyCode,f=B.component.key[d],h=e(c,g);27==d?B.close(!0):h!=B.$holder[0]||!f&&13!=d?a.contains(B.$root[0],h)&&13==d&&(c.preventDefault(),h.click()):(c.preventDefault(),f?b._.trigger(B.component.key.go,B,[b._.trigger(f)]):B.$root.find("."+y.highlighted).hasClass(y.disabled)||(B.set("select",B.component.item.highlight),x.closeOnSelect&&B.close(!0)))})),B.trigger("open"))},close:function(b){return b&&(x.editable?g.focus():(B.$holder.off("focus.toOpen").focus(),setTimeout(function(){B.$holder.on("focus.toOpen",t)},0))),z.removeClass(y.active),f(g,"expanded",!1),setTimeout(function(){B.$root.removeClass(y.opened+" "+y.focused),f(B.$root[0],"hidden",!0)},0),w.open?(w.open=!1,v&&a("body").css("overflow","").css("padding-right","-="+d()),k.off("."+w.id),B.trigger("close")):B},clear:function(a){return B.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in B.component.item&&(void 0===f&&(f=null),B.component.set(e,f,d)),"select"!=e&&"clear"!=e||!x.updateInput||z.val("clear"==e?"":B.get(e,x.format)).trigger("change");B.render()}return d.muted?B:B.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=w[a])return w[a];if("valueSubmit"==a){if(B._hidden)return B._hidden.value;a="value"}if("value"==a)return g.value;if(a in B.component.item){if("string"==typeof c){var d=B.component.get(a);return d?b._.trigger(B.component.formats.toString,B.component,[c,d]):""}return B.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),w.methods[e]=w.methods[e]||[],w.methods[e].push(f)}return B},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a<namesCount;a+=1)(b=c[a])in w.methods&&delete w.methods[b];return B},trigger:function(a,c){var d=function(a){var d=w.methods[a];d&&d.map(function(a){b._.trigger(a,B,[c])})};return d("_"+a),d(a),B}};return new A}function c(a){var b,c="position";return a.currentStyle?b=a.currentStyle[c]:window.getComputedStyle&&(b=getComputedStyle(a)[c]),"fixed"==b}function d(){if(l.height()<=j.height())return 0;var b=a('<div style="visibility:hidden;width:100px" />').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('<div style="width:100%" />').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(a,b){var c=[];return a.path&&(c=a.path),a.originalEvent&&a.originalEvent.path&&(c=a.originalEvent.path),c&&c.length>0?b&&c.indexOf(b)>=0?b:c[0]:a.target}function f(b,c,d){if(a.isPlainObject(c))for(var e in c)g(b,e,c[e]);else g(b,c,d)}function g(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function h(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d;c+=null==b[d]?"":e+'="'+b[d]+'"'}return c}function i(){try{return document.activeElement}catch(a){}}var j=a(window),k=a(document),l=a(document.documentElement),m=null!=document.documentElement.style.transition;return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+"</"+b+">"):""},lead:function(a){return(a<10?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1==0},ariaAttr:h},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){a(this).data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b});
================================================
FILE: lib/compressed/picker.time.js
================================================
/*!
* Time picker for pickadate.js v3.6.4
* http://amsul.github.io/pickadate.js/time.htm
*/
!function(a){"function"==typeof define&&define.amd?define(["./picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0].value,e=a.$node.data("value"),f=e||d,g=e?b.formatSubmit:b.format;c.settings=b,c.$node=a.$node,c.queue={interval:"i",min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse create validate",view:"parse create validate",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.interval=b.interval||30,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return!0===a[0]?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),f?c.set("select",f,{format:g}):c.set("select",null).set("highlight",c.item.now),c.key={40:1,38:-1,39:1,37:-1,go:function(a){c.set("highlight",c.item.highlight.pick+a*c.item.interval,{interval:a*c.item.interval}),this.render()}},a.on("render",function(){var c=a.$root.children(),d=c.find("."+b.klass.viewset),e=function(a){return["webkit","moz","ms","o",""].map(function(b){return(b?"-"+b+"-":"")+a})},f=function(a,b){e("transform").map(function(c){a.css(c,b)}),e("transition").map(function(c){a.css(c,b)})};d.length&&(f(c,"none"),c[0].scrollTop=~~d.position().top-2*d[0].clientHeight,f(c,""))},1).on("open",function(){a.$root.find("button").attr("disabled",!1)},1).on("close",function(){a.$root.find("button").attr("disabled",!0)},1)}var d=24,e=60,f=12,g=d*e,h=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):"interval"==a?d.set("min",e.min,c).set("max",e.max,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",b,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",b,c),"min"==a&&d.set("max",e.max,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,f){var i=this;return c=void 0===c?a:c,h.isDate(c)&&(c=[c.getHours(),c.getMinutes()]),b.isPlainObject(c)&&h.isInteger(c.pick)?c=c.pick:b.isArray(c)?c=+c[0]*e+ +c[1]:h.isInteger(c)||(c=i.now(a,c,f)),"max"==a&&c<i.item.min.pick&&(c+=g),"min"!=a&&"max"!=a&&(c-i.item.min.pick)%i.item.interval!=0&&(c+=i.item.interval),c=i.normalize(a,c,f),{hour:~~(d+c/e)%d,mins:(e+c%e)%e,time:(g+c)%g,pick:c%g}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return!0===a||b.isArray(a)||h.isDate(a)?d.create(a):a};return h.isInteger(a)||(a=e(a)),h.isInteger(c)||(c=e(c)),h.isInteger(a)&&b.isPlainObject(c)?a=[c.hour,c.mins+a*d.settings.interval]:h.isInteger(c)&&b.isPlainObject(a)&&(c=[a.hour,a.mins+c*d.settings.interval]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b){var c,d=this.item.interval,f=new Date,g=f.getHours()*e+f.getMinutes(),i=h.isInteger(b);return g-=g%d,c=b<0&&d*b+g<=-d,g+="min"==a&&c?0:d,i&&(g+=d*(c&&"max"!=a?b+1:b)),g},c.prototype.normalize=function(a,b){var c=this.item.interval,d=this.item.min&&this.item.min.pick||0;return b-="min"==a?0:(b-d)%c},c.prototype.measure=function(a,c,f){var g=this;return c||(c="min"==a?[0,0]:[d-1,e-1]),"string"==typeof c?c=g.parse(a,c):!0===c||h.isInteger(c)?c=g.now(a,c,f):b.isPlainObject(c)&&h.isInteger(c.pick)&&(c=g.normalize(a,c.pick,f)),c},c.prototype.validate=function(a,b,c){var d=this,e=c&&c.interval?c.interval:d.item.interval;return d.disabled(b)&&(b=d.shift(b,e)),b=d.scope(b),d.disabled(b)&&(b=d.shift(b,-1*e)),b},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return h.isInteger(d)?a.hour==d:b.isArray(d)||h.isDate(d)?a.pick==c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[2]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.shift=function(a,b){var c=this,d=c.item.min.pick,e=c.item.max.pick;for(b=b||c.item.interval;c.disabled(a)&&(a=c.create(a.pick+=b),!(a.pick<=d||a.pick>=e)););return a},c.prototype.scope=function(a){var b=this.item.min.pick,c=this.item.max.pick;return this.create(a.pick>c?c:a.pick<b?b:a)},c.prototype.parse=function(a,b,c){var d,f,g,i,j,k=this,l={};if(!b||"string"!=typeof b)return b;c&&c.format||(c=c||{},c.format=k.settings.format),k.formats.toArray(c.format).map(function(a){var c,d=k.formats[a],e=d?h.trigger(d,k,[b,l]):a.replace(/^!/,"").length;d&&(c=b.substr(0,e),l[a]=c.match(/^\d+$/)?+c:c),b=b.substr(e)});for(i in l)j=l[i],h.isInteger(j)?i.match(/^(h|hh)$/i)?(d=j,"h"!=i&&"hh"!=i||(d%=12)):"i"==i&&(f=j):i.match(/^a$/i)&&j.match(/^p/i)&&("h"in l||"hh"in l)&&(g=!0);return(g?d+12:d)*e+f},c.prototype.formats={h:function(a,b){return a?h.digits(a):b.hour%f||f},hh:function(a,b){return a?2:h.lead(b.hour%f||f)},H:function(a,b){return a?h.digits(a):""+b.hour%24},HH:function(a,b){return a?h.digits(a):h.lead(b.hour%24)},i:function(a,b){return a?2:h.lead(b.mins)},a:function(a,b){return a?4:g/2>b.time%g?"a.m.":"p.m."},A:function(a,b){return a?2:g/2>b.time%g?"AM":"PM"},toArray:function(a){return a.split(/(h{1,2}|H{1,2}|i|a|A|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return h.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}},c.prototype.isTimeExact=function(a,c){var d=this;return h.isInteger(a)&&h.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(h.isDate(a)||b.isArray(a))&&(h.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&(d.isTimeExact(a.from,c.from)&&d.isTimeExact(a.to,c.to))},c.prototype.isTimeOverlap=function(a,c){var d=this;return h.isInteger(a)&&(h.isDate(c)||b.isArray(c))?a===d.create(c).hour:h.isInteger(c)&&(h.isDate(a)||b.isArray(a))?c===d.create(a).hour:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.overlapRanges(a,c)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():!1===c?(d.flipEnable(1),e=[]):!0===c?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,f=0;f<e.length;f+=1)if(d.isTimeExact(a,e[f])){c=!0;break}c||(h.isInteger(a)||h.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&e.push(a)}),e},c.prototype.activate=function(a,c){var d=this,e=d.item.disable,f=e.length;return"flip"==c?d.flipEnable():!0===c?(d.flipEnable(1),e=[]):!1===c?(d.flipEnable(-1),e=[]):c.map(function(a){var c,g,i,j;for(i=0;i<f;i+=1){if(g=e[i],d.isTimeExact(g,a)){c=e[i]=null,j=!0;break}if(d.isTimeOverlap(g,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[2]||c.push("inverted")):h.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;i<f;i+=1)if(d.isTimeExact(e[i],a)){e[i]=null;break}if(j)for(i=0;i<f;i+=1)if(d.isTimeOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.i=function(a,b){return h.isInteger(b)&&b>0?b:this.item.interval},c.prototype.nodes=function(a){var b=this,c=b.settings,d=b.item.select,e=b.item.highlight,f=b.item.view,g=b.item.disable;return h.node("ul",h.group({min:b.item.min.pick,max:b.item.max.pick,i:b.item.interval,node:"li",item:function(a){a=b.create(a);var i=a.pick,j=d&&d.pick==i,k=e&&e.pick==i,l=g&&b.disabled(a),m=h.trigger(b.formats.toString,b,[c.format,a]);return[h.trigger(b.formats.toString,b,[h.trigger(c.formatLabel,b,[a])||c.format,a]),function(a){return j&&a.push(c.klass.selected),k&&a.push(c.klass.highlighted),f&&f.pick==i&&a.push(c.klass.viewset),l&&a.push(c.klass.disabled),a.join(" ")}([c.klass.listItem]),"data-pick="+a.pick+" "+h.ariaAttr({role:"option",label:m,selected:!(!j||b.$node.val()!==m)||null,activedescendant:!!k||null,disabled:!!l||null})]}})+h.node("li",h.node("button",c.clear,c.klass.buttonClear,"type=button data-clear=1"+(a?"":" disabled")+" "+h.ariaAttr({controls:b.$node[0].id})),"",h.ariaAttr({role:"presentation"})),c.klass.list,h.ariaAttr({role:"listbox",controls:b.$node[0].id}))},c.defaults=function(a){return{clear:"Clear",format:"h:i A",interval:30,closeOnSelect:!0,closeOnClear:!0,updateInput:!0,klass:{picker:a+" "+a+"--time",holder:a+"__holder",list:a+"__list",listItem:a+"__list-item",disabled:a+"__list-item--disabled",selected:a+"__list-item--selected",highlighted:a+"__list-item--highlighted",viewset:a+"__list-item--viewset",now:a+"__list-item--now",buttonClear:a+"__button--clear"}}}(a.klasses().picker),a.extend("pickatime",c)});
================================================
FILE: lib/compressed/themes/classic.css
================================================
.picker,.picker__holder{width:100%;position:absolute}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{overflow-y:auto;-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #aaa;border-top-width:0;border-bottom-width:0;border-radius:0 0 5px 5px;box-sizing:border-box;min-width:176px;max-width:466px;max-height:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;transform:translateY(-1em) perspective(600px) rotateX(10deg);transition:transform .15s ease-out,opacity .15s ease-out,max-height 0s .15s,border-width 0s .15s}/*!
* Classic picker styling for pickadate.js
* Demo: http://amsul.github.io/pickadate.js
*/.picker__frame{padding:1px}.picker__wrap{margin:-1px}.picker--opened .picker__holder{max-height:25em;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1;opacity:1;border-top-width:1px;border-bottom-width:1px;transform:translateY(0) perspective(600px) rotateX(0);transition:transform .15s ease-out,opacity .15s ease-out,max-height 0s,border-width 0s;box-shadow:0 6px 18px 1px rgba(0,0,0,.12)}
================================================
FILE: lib/compressed/themes/classic.date.css
================================================
.picker__footer,.picker__header,.picker__table{text-align:center}.picker__box{padding:0 1em}.picker__header{position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{border:1px solid #b7b7b7;height:2em;padding:.5em;margin-left:.25em;margin-right:.25em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--next,.picker__nav--prev{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}@media (min-width:24.5em){.picker__select--month,.picker__select--year{margin-top:-.5em}.picker__nav--next,.picker__nav--prev{top:-.33em}.picker__nav--prev{padding-right:1.5em}.picker__nav--next{padding-left:1.5em}}.picker__nav--next:before,.picker__nav--prev:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--next:hover,.picker__nav--prev:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:before,.picker__nav--disabled:before:hover,.picker__nav--disabled:hover{cursor:default;background:0 0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd}.picker--focused .picker__day--highlighted,.picker__day--highlighted:hover,.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted{border-color:#0089ec}.picker--focused .picker__day--selected,.picker__day--selected,.picker__day--selected:hover{background:#0089ec;color:#fff}.picker--focused .picker__day--disabled,.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbb}.picker__button--clear,.picker__button--close,.picker__button--today{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:33%;display:inline-block;vertical-align:bottom}.picker__button--clear:hover,.picker__button--close:hover,.picker__button--today:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--clear:focus,.picker__button--close:focus,.picker__button--today:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--clear:before,.picker__button--close:before,.picker__button--today:before{position:relative;display:inline-block;height:0}.picker__button--clear:before,.picker__button--today:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-.25em;width:.66em;border-top:3px solid #e20}.picker__button--close:before{content:"\D7";top:-.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaa}
================================================
FILE: lib/compressed/themes/classic.time.css
================================================
.picker__list{list-style:none;padding:.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #ddd;border-top:1px solid #ddd;margin-bottom:-1px;position:relative;background:#fff;padding:.75em 1.25em}.picker__list-item--highlighted,.picker__list-item:hover{border-color:#0089ec;z-index:10}.picker--focused .picker__list-item--highlighted,.picker__list-item--highlighted:hover,.picker__list-item:hover{color:#000;background:#b1dcfb;cursor:pointer}@media (min-height:46.75em){.picker__list-item{padding:.5em 1em}}.picker--focused .picker__list-item--selected,.picker__list-item--selected,.picker__list-item--selected:hover{background:#0089ec;color:#fff;z-index:10}.picker--focused .picker__list-item--disabled,.picker__list-item--disabled,.picker__list-item--disabled:hover{background:#f5f5f5;color:#ddd;cursor:default;border-color:#ddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:0 0;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:#666}.picker--time .picker__button--clear:focus,.picker--time .picker__button--clear:hover{background:#e20;border-color:#e20;cursor:pointer;color:#fff;outline:0}.picker--time .picker__button--clear:before{top:-.25em;color:#666;font-size:1.25em;font-weight:700}.picker--time .picker__button--clear:focus:before,.picker--time .picker__button--clear:hover:before{color:#fff;border-color:#fff}.picker--time{min-width:256px;max-width:320px}.picker--time .picker__holder{background:#f2f2f2}@media (min-height:40.125em){.picker--time .picker__holder{font-size:.875em}}.picker--time .picker__box{padding:0;position:relative}
================================================
FILE: lib/compressed/themes/default.css
================================================
.picker{font-size:16px;text-align:left;line-height:1.2;color:#000;position:absolute;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;position:fixed;transition:background .15s ease-out,transform 0s .15s;-webkit-backface-visibility:hidden}/*!
* Default mobile-first, responsive styling for pickadate.js
* Demo: http://amsul.github.io/pickadate.js
*/.picker__frame,.picker__holder{top:0;bottom:0;left:0;right:0;-ms-transform:translateY(100%);transform:translateY(100%)}.picker__frame{position:absolute;margin:0 auto;min-width:256px;max-width:666px;width:100%;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;transition:all .15s ease-out}.picker__wrap{display:table;width:100%;height:100%}@media (min-height:33.875em){.picker__frame{overflow:visible;top:auto;bottom:-100%;max-height:80%}.picker__wrap{display:block}}.picker__box{background:#fff;display:table-cell;vertical-align:middle}@media (min-height:26.5em){.picker__box{font-size:1.25em}}@media (min-height:33.875em){.picker__box{display:block;font-size:1.33em;border:1px solid #777;border-top-color:#898989;border-bottom-width:0;border-radius:5px 5px 0 0;box-shadow:0 12px 36px 16px rgba(0,0,0,.24)}.picker--opened .picker__frame{top:auto;bottom:0}}@media (min-height:40.125em){.picker__frame{margin-bottom:7.5%}.picker__box{font-size:1.5em;border-bottom-width:1px;border-radius:5px}}.picker--opened .picker__holder{-ms-transform:translateY(0);transform:translateY(0);zoom:1;background:rgba(0,0,0,.32);transition:background .15s ease-out}.picker--opened .picker__frame{-ms-transform:translateY(0);transform:translateY(0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1;opacity:1}
================================================
FILE: lib/compressed/themes/default.date.css
================================================
.picker__footer,.picker__header,.picker__table{text-align:center}.picker__box{padding:0 1em}.picker__header{position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{border:1px solid #b7b7b7;height:2em;padding:.5em;margin-left:.25em;margin-right:.25em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--next,.picker__nav--prev{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}@media (min-width:24.5em){.picker__select--month,.picker__select--year{margin-top:-.5em}.picker__nav--next,.picker__nav--prev{top:-.33em}.picker__nav--prev{padding-right:1.5em}.picker__nav--next{padding-left:1.5em}}.picker__nav--next:before,.picker__nav--prev:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--next:hover,.picker__nav--prev:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:before,.picker__nav--disabled:before:hover,.picker__nav--disabled:hover{cursor:default;background:0 0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd}.picker--focused .picker__day--highlighted,.picker__day--highlighted:hover,.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted{border-color:#0089ec}.picker--focused .picker__day--selected,.picker__day--selected,.picker__day--selected:hover{background:#0089ec;color:#fff}.picker--focused .picker__day--disabled,.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbb}.picker__button--clear,.picker__button--close,.picker__button--today{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:33%;display:inline-block;vertical-align:bottom}.picker__button--clear:hover,.picker__button--close:hover,.picker__button--today:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--clear:focus,.picker__button--close:focus,.picker__button--today:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--clear:before,.picker__button--close:before,.picker__button--today:before{position:relative;display:inline-block;height:0}.picker__button--clear:before,.picker__button--today:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-.25em;width:.66em;border-top:3px solid #e20}.picker__button--close:before{content:"\D7";top:-.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaa}
================================================
FILE: lib/compressed/themes/default.time.css
================================================
.picker__list{list-style:none;padding:.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #ddd;border-top:1px solid #ddd;margin-bottom:-1px;position:relative;background:#fff;padding:.75em 1.25em}.picker__list-item--highlighted,.picker__list-item:hover{border-color:#0089ec;z-index:10}.picker--focused .picker__list-item--highlighted,.picker__list-item--highlighted:hover,.picker__list-item:hover{cursor:pointer;color:#000;background:#b1dcfb}@media (min-height:46.75em){.picker__list-item{padding:.5em 1em}}.picker--focused .picker__list-item--selected,.picker__list-item--selected,.picker__list-item--selected:hover{background:#0089ec;color:#fff;z-index:10}.picker--focused .picker__list-item--disabled,.picker__list-item--disabled,.picker__list-item--disabled:hover{background:#f5f5f5;color:#ddd;cursor:default;border-color:#ddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:0 0;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:#666}.picker--time .picker__button--clear:focus,.picker--time .picker__button--clear:hover{background:#e20;border-color:#e20;cursor:pointer;color:#fff;outline:0}.picker--time .picker__button--clear:before{top:-.25em;color:#666;font-size:1.25em;font-weight:700}.picker--time .picker__button--clear:focus:before,.picker--time .picker__button--clear:hover:before{color:#fff;border-color:#fff}.picker--time .picker__frame{min-width:256px;max-width:320px}.picker--time .picker__box{font-size:1em;background:#f2f2f2;padding:0}@media (min-height:40.125em){.picker--time .picker__box{margin-bottom:5em}}
================================================
FILE: lib/compressed/themes/rtl.css
================================================
/*!
* Styling for RTL (right-to-left) languages using pickadate.js
*/.picker{direction:rtl}.picker__nav--next{right:auto;left:-1em}.picker__nav--prev{left:auto;right:-1em}.picker__nav--next:before{border-left:0;border-right:.75em solid #000}.picker__nav--prev:before{border-right:0;border-left:.75em solid #000}
================================================
FILE: lib/compressed/translations/ar.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],monthsShort:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],weekdaysFull:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],weekdaysShort:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],today:"اليوم",clear:"مسح",format:"yyyy mmmm dd",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"مسح"});
================================================
FILE: lib/compressed/translations/bg_BG.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["януари","февруари","март","април","май","юни","юли","август","септември","октомври","ноември","декември"],monthsShort:["янр","фев","мар","апр","май","юни","юли","авг","сеп","окт","ное","дек"],weekdaysFull:["неделя","понеделник","вторник","сряда","четвъртък","петък","събота"],weekdaysShort:["нд","пн","вт","ср","чт","пт","сб"],today:"днес",clear:"изтривам",firstDay:1,format:"d mmmm yyyy г.",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"изтривам"});
================================================
FILE: lib/compressed/translations/bs_BA.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januar","februar","mart","april","maj","juni","juli","august","septembar","oktobar","novembar","decembar"],monthsShort:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],weekdaysFull:["nedjelja","ponedjeljak","utorak","srijeda","cetvrtak","petak","subota"],weekdaysShort:["ne","po","ut","sr","če","pe","su"],today:"danas",clear:"izbrisati",firstDay:1,format:"dd. mmmm yyyy.",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"izbrisati"});
================================================
FILE: lib/compressed/translations/ca_ES.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Gener","Febrer","Març","Abril","Maig","juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],monthsShort:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Des"],weekdaysFull:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],weekdaysShort:["diu","dil","dim","dmc","dij","div","dis"],today:"avui",clear:"esborra",close:"tanca",firstDay:1,format:"dddd d !de mmmm !de yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"esborra"});
================================================
FILE: lib/compressed/translations/cs_CZ.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthsShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],weekdaysFull:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],weekdaysShort:["ne","po","út","st","čt","pá","so"],today:"dnes",clear:"vymazat",firstDay:1,format:"d. mmmm yyyy",formatSubmit:"yyyy/mm/dd",close:"zavřít"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"vymazat"});
================================================
FILE: lib/compressed/translations/da_DK.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],monthsShort:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],weekdaysFull:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],weekdaysShort:["søn","man","tir","ons","tor","fre","lør"],today:"i dag",clear:"slet",close:"luk",firstDay:1,format:"d. mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"slet"});
================================================
FILE: lib/compressed/translations/de_DE.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],weekdaysFull:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],weekdaysShort:["So","Mo","Di","Mi","Do","Fr","Sa"],today:"Heute",clear:"Löschen",close:"Schließen",firstDay:1,format:"dddd, dd. mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Löschen",format:"H:i"});
================================================
FILE: lib/compressed/translations/el_GR.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthsShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],weekdaysFull:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],weekdaysShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],today:"σήμερα",clear:"Διαγραφή",firstDay:1,format:"d mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Διαγραφή"});
================================================
FILE: lib/compressed/translations/es_ES.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],weekdaysFull:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],weekdaysShort:["dom","lun","mar","mié","jue","vie","sáb"],today:"Hoy",clear:"Borrar",close:"Cerrar",firstDay:1,format:"dddd d !de mmmm !de yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Borrar"});
================================================
FILE: lib/compressed/translations/et_EE.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["jaanuar","veebruar","märts","aprill","mai","juuni","juuli","august","september","oktoober","november","detsember"],monthsShort:["jaan","veebr","märts","apr","mai","juuni","juuli","aug","sept","okt","nov","dets"],weekdaysFull:["pühapäev","esmaspäev","teisipäev","kolmapäev","neljapäev","reede","laupäev"],weekdaysShort:["püh","esm","tei","kol","nel","ree","lau"],today:"täna",clear:"kustuta",firstDay:1,format:"d. mmmm yyyy. a",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"kustuta"});
================================================
FILE: lib/compressed/translations/eu_ES.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthsShort:["urt","ots","mar","api","mai","eka","uzt","abu","ira","urr","aza","abe"],weekdaysFull:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],weekdaysShort:["ig.","al.","ar.","az.","og.","or.","lr."],today:"gaur",clear:"garbitu",firstDay:1,format:"dddd, yyyy(e)ko mmmmren da",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"garbitu"});
================================================
FILE: lib/compressed/translations/fa_IR.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthsShort:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],weekdaysFull:["یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],weekdaysShort:["یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],today:"امروز",clear:"پاک کردن",close:"بستن",format:"yyyy mmmm dd",formatSubmit:"yyyy/mm/dd",labelMonthNext:"ماه بعدی",labelMonthPrev:"ماه قبلی"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"پاک کردن"});
================================================
FILE: lib/compressed/translations/fi_FI.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],monthsShort:["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],weekdaysFull:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],weekdaysShort:["su","ma","ti","ke","to","pe","la"],today:"tänään",clear:"tyhjennä",firstDay:1,format:"d.m.yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"tyhjennä"});
================================================
FILE: lib/compressed/translations/fr_FR.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthsShort:["Jan","Fev","Mar","Avr","Mai","Juin","Juil","Aou","Sep","Oct","Nov","Dec"],weekdaysFull:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],weekdaysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],today:"Aujourd'hui",clear:"Effacer",close:"Fermer",firstDay:1,format:"dd mmmm yyyy",formatSubmit:"yyyy/mm/dd",labelMonthNext:"Mois suivant",labelMonthPrev:"Mois précédent",labelMonthSelect:"Sélectionner un mois",labelYearSelect:"Sélectionner une année"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Effacer",format:"H:i"});
================================================
FILE: lib/compressed/translations/ge_GEO.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthsShort:["იან","თებ","მარტ","აპრ","მაი","ივნ","ივლ","აგვ","სექტ","ოქტ","ნოემ","დეკ"],weekdaysFull:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუშაბათი","პარასკევი","შაბათი"],weekdaysShort:["კვ","ორ","სამ","ოთხ","ხუთ","პარ","შაბ"],today:"დღეს",clear:"გასუფთავება",firstDay:1,format:"d mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"გასუფთავება"});
================================================
FILE: lib/compressed/translations/gl_ES.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthsShort:["xan","feb","mar","abr","mai","xun","xul","ago","sep","out","nov","dec"],weekdaysFull:["domingo","luns","martes","mércores","xoves","venres","sábado"],weekdaysShort:["dom","lun","mar","mér","xov","ven","sab"],today:"hoxe",clear:"borrar",firstDay:1,format:"dddd d !de mmmm !de yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"borrar"});
================================================
FILE: lib/compressed/translations/he_IL.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthsShort:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],weekdaysFull:["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום ששי","יום שבת"],weekdaysShort:["א","ב","ג","ד","ה","ו","ש"],today:"היום",clear:"למחוק",format:"yyyy mmmmב d dddd",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"למחוק"});
================================================
FILE: lib/compressed/translations/hi_IN.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["जनवरी","फरवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthsShort:["जन","फर","मार्च","अप्रैल","मई","जून","जु","अग","सित","अक्टू","नव","दिस"],weekdaysFull:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],weekdaysShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],today:"आज की तारीख चयन करें",clear:"चुनी हुई तारीख को मिटाएँ",close:"विंडो बंद करे",firstDay:1,format:"dd/mm/yyyy",formatSubmit:"yyyy/mm/dd",labelMonthNext:"अगले माह का चयन करें",labelMonthPrev:"पिछले माह का चयन करें",labelMonthSelect:"किसि एक महीने का चयन करें",labelYearSelect:"किसि एक वर्ष का चयन करें"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"चुनी हुई तारीख को मिटाएँ"});
================================================
FILE: lib/compressed/translations/hr_HR.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["siječanj","veljača","ožujak","travanj","svibanj","lipanj","srpanj","kolovoz","rujan","listopad","studeni","prosinac"],monthsShort:["sij","velj","ožu","tra","svi","lip","srp","kol","ruj","lis","stu","pro"],weekdaysFull:["nedjelja","ponedjeljak","utorak","srijeda","četvrtak","petak","subota"],weekdaysShort:["ned","pon","uto","sri","čet","pet","sub"],today:"Danas",clear:"Izbriši",close:"Zatvori",firstDay:1,format:"d. mmmm yyyy.",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Izbriši"});
================================================
FILE: lib/compressed/translations/hu_HU.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],monthsShort:["jan","febr","márc","ápr","máj","jún","júl","aug","szept","okt","nov","dec"],weekdaysFull:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],weekdaysShort:["V","H","K","Sze","CS","P","Szo"],today:"Ma",clear:"Törlés",close:"Bezárás",firstDay:1,format:"yyyy. mmmm dd.",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Törlés"});
================================================
FILE: lib/compressed/translations/id_ID.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agu","Sep","Okt","Nov","Des"],weekdaysFull:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],weekdaysShort:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],today:"hari ini",clear:"menghapus",firstDay:1,format:"d mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"menghapus"});
================================================
FILE: lib/compressed/translations/is_IS.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["janúar","febrúar","mars","apríl","maí","júní","júlí","ágúst","september","október","nóvember","desember"],monthsShort:["jan","feb","mar","apr","maí","jún","júl","ágú","sep","okt","nóv","des"],weekdaysFull:["sunnudagur","mánudagur","þriðjudagur","miðvikudagur","fimmtudagur","föstudagur","laugardagur"],weekdaysShort:["sun","mán","þri","mið","fim","fös","lau"],today:"Í dag",clear:"Hreinsa",firstDay:1,format:"dd. mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Hreinsa"});
================================================
FILE: lib/compressed/translations/it_IT.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],monthsShort:["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],weekdaysFull:["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],weekdaysShort:["dom","lun","mar","mer","gio","ven","sab"],today:"Oggi",clear:"Cancella",close:"Chiudi",firstDay:1,format:"dddd d mmmm yyyy",formatSubmit:"yyyy/mm/dd",labelMonthNext:"Mese successivo",labelMonthPrev:"Mese precedente",labelMonthSelect:"Seleziona un mese",labelYearSelect:"Seleziona un anno"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Cancella",format:"HH:i",formatSubmit:"HH:i"});
================================================
FILE: lib/compressed/translations/ja_JP.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],weekdaysFull:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],weekdaysShort:["日","月","火","水","木","金","土"],today:"今日",clear:"消去",close:"閉じる",firstDay:1,format:"yyyy年mm月dd日",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"消去"});
================================================
FILE: lib/compressed/translations/km_KH.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthsShort:["មក.","កុ.","មី.","មេ.","ឧស.","មិថុ.","កក្ក.","សី.","កញ.","តុ.","វិច្ឆ.","ធ."],weekdaysFull:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],weekdaysShort:["អា.","ច.","អ.","ព.","ព្រ.","សុ.","ស."],today:"ថ្ងៃនេះ",clear:"លុប",close:"បិទ",labelMonthNext:"ខែបន្ទាប់",labelMonthPrev:"ខែមុន",labelMonthSelect:"ជ្រើសរើសខែ",labelYearSelect:"ជ្រើសរើសឆ្នាំ",firstDay:1,showMonthsShort:!1,showWeekdaysFull:!0,format:"ថ្ងៃទី d ខែmmmm ឆ្នាំ yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"លុប"});
================================================
FILE: lib/compressed/translations/ko_KR.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],weekdaysFull:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],weekdaysShort:["일","월","화","수","목","금","토"],today:"오늘",clear:"취소",firstDay:1,format:"yyyy 년 mm 월 dd 일",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"취소"});
================================================
FILE: lib/compressed/translations/lt_LT.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{labelMonthNext:"Sekantis mėnuo",labelMonthPrev:"Ankstesnis mėnuo",labelMonthSelect:"Pasirinkite mėnesį",labelYearSelect:"Pasirinkite metus",monthsFull:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthsShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rgp","Rgs","Spa","Lap","Grd"],weekdaysFull:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis"],weekdaysShort:["Sk","Pr","An","Tr","Kt","Pn","Št"],today:"Šiandien",clear:"Išvalyti",close:"Uždaryti",firstDay:1,format:"yyyy-mm-dd",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Išvalyti",format:"HH:i"});
================================================
FILE: lib/compressed/translations/lv_LV.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],weekdaysFull:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena"],weekdaysShort:["Sv","P","O","T","C","Pk","S"],today:"Šodiena",clear:"Dzēst",close:"Aizvērt",firstDay:1,format:"yyyy.mm.dd. dddd",formatSubmit:"yyyy/mm/dd",labelMonthNext:"Nākamais mēnesis",labelMonthPrev:"Iepriekšējais mēnesis",labelMonthSelect:"Izvēlēties mēnesi",labelYearSelect:"Izvēlēties gadu"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Dzēst"});
================================================
FILE: lib/compressed/translations/nb_NO.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthsShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],weekdaysFull:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],weekdaysShort:["søn","man","tir","ons","tor","fre","lør"],today:"i dag",clear:"nullstill",close:"lukk",firstDay:1,format:"dd. mmm. yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"nullstill"});
================================================
FILE: lib/compressed/translations/ne_NP.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["जनवरी","फेब्रुअरी","मार्च","अप्रिल","मे","जुन","जुलाई","अगस्त","सेप्टेम्बर","अक्टोबर","नोवेम्बर","डिसेम्बर"],monthsShort:["जन","फेब्रु","मार्च","अप्रिल","मे","जुन","जुल","अग","सेप्टे","अक्टो","नोभे","डिसे"],weekdaysFull:["सोमबार","मङ्लबार","बुधबार","बिहीबार","शुक्रबार","शनिबार","आईतबार"],weekdaysShort:["सोम","मंगल्","बुध","बिही","शुक्र","शनि","आईत"],numbers:["०","१","२","३","४","५","६","७","८","९"],today:"आज",clear:"मेटाउनुहोस्",format:"dddd, dd mmmm, yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"मेटाउनुहोस्"});
================================================
FILE: lib/compressed/translations/nl_NL.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthsShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],weekdaysFull:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],weekdaysShort:["zo","ma","di","wo","do","vr","za"],today:"vandaag",clear:"wissen",close:"sluiten",firstDay:1,format:"dddd d mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"wissen"});
================================================
FILE: lib/compressed/translations/no_NO.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthsShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],weekdaysFull:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],weekdaysShort:["søn","man","tir","ons","tor","fre","lør"],today:"i dag",clear:"nullstill",firstDay:1,format:"dd. mmm. yyyy",formatSubmit:"yyyy/mm/dd"});
================================================
FILE: lib/compressed/translations/pl_PL.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],monthsShort:["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],weekdaysFull:["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],weekdaysShort:["niedz.","pn.","wt.","śr.","cz.","pt.","sob."],today:"Dzisiaj",clear:"Usuń",close:"Zamknij",firstDay:1,format:"d mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"usunąć"});
================================================
FILE: lib/compressed/translations/pt_BR.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],monthsShort:["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],weekdaysFull:["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],weekdaysShort:["dom","seg","ter","qua","qui","sex","sab"],today:"hoje",clear:"limpar",close:"fechar",format:"dddd, d !de mmmm !de yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"limpar"});
================================================
FILE: lib/compressed/translations/pt_PT.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],weekdaysFull:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],weekdaysShort:["dom","seg","ter","qua","qui","sex","sab"],today:"Hoje",clear:"Limpar",close:"Fechar",format:"d !de mmmm !de yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Limpar"});
================================================
FILE: lib/compressed/translations/ro_RO.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"],monthsShort:["ian","feb","mar","apr","mai","iun","iul","aug","sep","oct","noi","dec"],weekdaysFull:["duminică","luni","marţi","miercuri","joi","vineri","sâmbătă"],weekdaysShort:["D","L","Ma","Mi","J","V","S"],today:"azi",clear:"șterge",firstDay:1,format:"dd mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"șterge"});
================================================
FILE: lib/compressed/translations/ru_RU.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],monthsShort:["янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек"],weekdaysFull:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],weekdaysShort:["вс","пн","вт","ср","чт","пт","сб"],today:"сегодня",clear:"удалить",close:"закрыть",firstDay:1,format:"d mmmm yyyy г.",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"удалить"});
================================================
FILE: lib/compressed/translations/sk_SK.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthsShort:["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],weekdaysFull:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],weekdaysShort:["Ne","Po","Ut","St","Št","Pi","So"],today:"dnes",clear:"vymazať",close:"zavrieť",firstDay:1,format:"d. mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"vymazať"});
================================================
FILE: lib/compressed/translations/sl_SI.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],monthsShort:["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],weekdaysFull:["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],weekdaysShort:["ned","pon","tor","sre","čet","pet","sob"],today:"danes",clear:"izbriši",close:"zapri",firstDay:1,format:"d. mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"izbriši"});
================================================
FILE: lib/compressed/translations/sr_RS_cy.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],monthsShort:["јан.","феб.","март","апр.","мај","јун","јул","авг.","септ.","окт.","нов.","дец."],weekdaysFull:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],weekdaysShort:["нед.","пон.","ут.","ср.","чет.","пет.","суб."],today:"данас",clear:"избриши",close:"затвори",firstDay:1,format:"d. MMMM yyyy.",formatSubmit:"yyyy/mm/dd",labelMonthNext:"Следећи месец",labelMonthPrev:"Претходни месец",labelMonthSelect:"Изаберите месец",labelYearSelect:"Изаберите годину"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"избриши"});
================================================
FILE: lib/compressed/translations/sr_RS_lt.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januar","februar","mart","april","maj","jun","juli","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mart","apr.","maj","jun","jul","avg.","sept.","okt.","nov.","dec."],weekdaysFull:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","ut.","sr.","čet.","pet.","sub."],today:"danas",clear:"izbriši",close:"zatvori",firstDay:1,format:"d. MMMM yyyy.",formatSubmit:"yyyy/mm/dd",labelMonthNext:"Sledeći mesec",labelMonthPrev:"Prethodni mesec",labelMonthSelect:"Izaberite mesec",labelYearSelect:"Izaberite godinu"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"izbriši"});
================================================
FILE: lib/compressed/translations/sv_SE.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],monthsShort:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],weekdaysFull:["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],weekdaysShort:["sön","mån","tis","ons","tor","fre","lör"],today:"Idag",clear:"Rensa",close:"Stäng",firstDay:1,format:"yyyy-mm-dd",formatSubmit:"yyyy/mm/dd",labelMonthNext:"Nästa månad",labelMonthPrev:"Föregående månad",labelMonthSelect:"Välj månad",labelYearSelect:"Välj år"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Rensa"});
================================================
FILE: lib/compressed/translations/th_TH.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthsShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],weekdaysFull:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],weekdaysShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],today:"วันนี้",clear:"ลบ",format:"d mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"ลบ"});
================================================
FILE: lib/compressed/translations/tr_TR.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],weekdaysFull:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],weekdaysShort:["Pzr","Pzt","Sal","Çrş","Prş","Cum","Cmt"],today:"Bugün",clear:"Sil",close:"Kapat",firstDay:1,format:"dd mmmm yyyy dddd",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"sil"});
================================================
FILE: lib/compressed/translations/uk_UA.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["січень","лютий","березень","квітень","травень","червень","липень","серпень","вересень","жовтень","листопад","грудень"],monthsShort:["січ","лют","бер","кві","тра","чер","лип","сер","вер","жов","лис","гру"],weekdaysFull:["неділя","понеділок","вівторок","середа","четвер","п‘ятниця","субота"],weekdaysShort:["нд","пн","вт","ср","чт","пт","сб"],today:"сьогодні",clear:"викреслити",firstDay:1,format:"dd mmmm yyyy p.",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"викреслити"});
================================================
FILE: lib/compressed/translations/vi_VN.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["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"],monthsShort:["Một","Hai","Ba","Tư","Năm","Sáu","Bảy","Tám","Chín","Mười","Mười Một","Mười Hai"],weekdaysFull:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],weekdaysShort:["C.Nhật","T.Hai","T.Ba","T.Tư","T.Năm","T.Sáu","T.Bảy"],today:"Hôm Nay",clear:"Xoá",close:"Đóng",firstDay:1,format:"Bạn chọn: dddd, dd mmmm, yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"Xoá"});
================================================
FILE: lib/compressed/translations/zh_CN.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["一","二","三","四","五","六","七","八","九","十","十一","十二"],weekdaysFull:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],weekdaysShort:["日","一","二","三","四","五","六"],today:"今天",clear:"清除",close:"关闭",firstDay:1,format:"yyyy 年 mm 月 dd 日",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"清除"});
================================================
FILE: lib/compressed/translations/zh_TW.js
================================================
jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["一","二","三","四","五","六","七","八","九","十","十一","十二"],weekdaysFull:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],weekdaysShort:["日","一","二","三","四","五","六"],today:"今天",clear:"清除",close:"關閉",firstDay:1,format:"yyyy 年 mm 月 dd 日",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"清除"});
================================================
FILE: lib/legacy.js
================================================
/*jshint
asi: true,
unused: true,
boss: true,
loopfunc: true,
eqnull: true
*/
/*!
* Legacy browser support
*/
// Map array support
if ( ![].map ) {
Array.prototype.map = function ( callback, self ) {
var array = this, len = array.length, newArray = new Array( len )
for ( var i = 0; i < len; i++ ) {
if ( i in array ) {
newArray[ i ] = callback.call( self, array[ i ], i, array )
}
}
return newArray
}
}
// Filter array support
if ( ![].filter ) {
Array.prototype.filter = function( callback ) {
if ( this == null ) throw new TypeError()
var t = Object( this ), len = t.length >>> 0
if ( typeof callback != 'function' ) throw new TypeError()
var newArray = [], thisp = arguments[ 1 ]
for ( var i = 0; i < len; i++ ) {
if ( i in t ) {
var val = t[ i ]
if ( callback.call( thisp, val, i, t ) ) newArray.push( val )
}
}
return newArray
}
}
// Index of array support
if ( ![].indexOf ) {
Array.prototype.indexOf = function( searchElement ) {
if ( this == null ) throw new TypeError()
var t = Object( this ), len = t.length >>> 0
if ( len === 0 ) return -1
var n = 0
if ( arguments.length > 1 ) {
n = Number( arguments[ 1 ] )
if ( n != n ) {
n = 0
}
else if ( n !== 0 && n != Infinity && n != -Infinity ) {
n = ( n > 0 || -1 ) * Math.floor( Math.abs( n ) )
}
}
if ( n >= len ) return -1
var k = n >= 0 ? n : Math.max( len - Math.abs( n ), 0 )
for ( ; k < len; k++ ) {
if ( k in t && t[ k ] === searchElement ) return k
}
return -1
}
}
/*!
* Cross-Browser Split 1.1.1
* Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
* Available under the MIT License
* http://blog.stevenlevithan.com/archives/cross-browser-split
*/
var nativeSplit = String.prototype.split, compliantExecNpcg = /()??/.exec('')[1] === undefined
String.prototype.split = function(separator, limit) {
var str = this
if (Object.prototype.toString.call(separator) !== '[object RegExp]') {
return nativeSplit.call(str, separator, limit)
}
var output = [],
flags = (separator.ignoreCase ? 'i' : '') +
(separator.multiline ? 'm' : '') +
(separator.extended ? 'x' : '') +
(separator.sticky ? 'y' : ''),
lastLastIndex = 0,
separator2, match, lastIndex, lastLength
separator = new RegExp(separator.source, flags + 'g')
str += ''
if (!compliantExecNpcg) {
separator2 = new RegExp('^' + separator.source + '$(?!\\s)', flags)
}
limit = limit === undefined ? -1 >>> 0 : limit >>> 0
while (match = separator.exec(str)) {
lastIndex = match.index + match[0].length
if (lastIndex > lastLastIndex) {
output.push(str.slice(lastLastIndex, match.index))
if (!compliantExecNpcg && match.length > 1) {
match[0].replace(separator2, function () {
for (var i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === undefined) {
match[i] = undefined
}
}
})
}
if (match.length > 1 && match.index < str.length) {
Array.prototype.push.apply(output, match.slice(1))
}
lastLength = match[0].length
lastLastIndex = lastIndex
if (output.length >= limit) {
break
}
}
if (separator.lastIndex === match.index) {
separator.lastIndex++
}
}
if (lastLastIndex === str.length) {
if (lastLength || !separator.test('')) {
output.push('')
}
} else {
output.push(str.slice(lastLastIndex))
}
return output.length > limit ? output.slice(0, limit) : output
};
================================================
FILE: lib/picker.date.js
================================================
/*!
* Date picker for pickadate.js v3.6.4
* http://amsul.github.io/pickadate.js/date.htm
*/
(function ( factory ) {
// AMD.
if ( typeof define == 'function' && define.amd )
define( ['./picker', 'jquery'], factory )
// Node.js/browserify.
else if ( typeof exports == 'object' )
module.exports = factory( require('./picker.js'), require('jquery') )
// Browser globals.
else factory( Picker, jQuery )
}(function( Picker, $ ) {
/**
* Globals and constants
*/
var DAYS_IN_WEEK = 7,
WEEKS_IN_CALENDAR = 6,
_ = Picker._
/**
* The date picker constructor
*/
function DatePicker( picker, settings ) {
var calendar = this,
element = picker.$node[ 0 ],
elementValue = element.value,
elementDataValue = picker.$node.data( 'value' ),
valueString = elementDataValue || elementValue,
formatString = elementDataValue ? settings.formatSubmit : settings.format,
isRTL = function() {
return element.currentStyle ?
// For IE.
element.currentStyle.direction == 'rtl' :
// For normal browsers.
getComputedStyle( picker.$root[0] ).direction == 'rtl'
}
calendar.settings = settings
calendar.$node = picker.$node
// The queue of methods that will be used to build item objects.
calendar.queue = {
min: 'measure create',
max: 'measure create',
now: 'now create',
select: 'parse create validate',
highlight: 'parse navigate create validate',
view: 'parse create validate viewset',
disable: 'deactivate',
enable: 'activate'
}
// The component's item object.
calendar.item = {}
calendar.item.clear = null
calendar.item.disable = ( settings.disable || [] ).slice( 0 )
calendar.item.enable = -(function( collectionDisabled ) {
return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1
})( calendar.item.disable )
calendar.
set( 'min', settings.min ).
set( 'max', settings.max ).
set( 'now' )
// When there’s a value, set the `select`, which in turn
// also sets the `highlight` and `view`.
if ( valueString ) {
calendar.set( 'select', valueString, {
format: formatString,
defaultValue: true
})
}
// If there’s no value, default to highlighting “today”.
else {
calendar.
set( 'select', null ).
set( 'highlight', calendar.item.now )
}
// The keycode to movement mapping.
calendar.key = {
40: 7, // Down
38: -7, // Up
39: function() { return isRTL() ? -1 : 1 }, // Right
37: function() { return isRTL() ? 1 : -1 }, // Left
go: function( timeChange ) {
var highlightedObject = calendar.item.highlight,
targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange )
calendar.set(
'highlight',
targetDate,
{ interval: timeChange }
)
this.render()
}
}
// Bind some picker events.
picker.
on( 'render', function() {
picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() {
var value = this.value
if ( value ) {
picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] )
picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' )
}
})
picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() {
var value = this.value
if ( value ) {
picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] )
picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' )
}
})
}, 1 ).
on( 'open', function() {
var includeToday = ''
if ( calendar.disabled( calendar.get('now') ) ) {
includeToday = ':not(.' + settings.klass.buttonToday + ')'
}
picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false )
}, 1 ).
on( 'close', function() {
picker.$root.find( 'button, select' ).attr( 'disabled', true )
}, 1 )
} //DatePicker
/**
* Set a datepicker item object.
*/
DatePicker.prototype.set = function( type, value, options ) {
var calendar = this,
calendarItem = calendar.item
// If the value is `null` just set it immediately.
if ( value === null ) {
if ( type == 'clear' ) type = 'select'
calendarItem[ type ] = value
return calendar
}
// Otherwise go through the queue of methods, and invoke the functions.
// Update this as the time unit, and set the final value as this item.
// * In the case of `enable`, keep the queue but set `disable` instead.
// And in the case of `flip`, keep the queue but set `enable` instead.
calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) {
value = calendar[ method ]( type, value, options )
return value
}).pop()
// Check if we need to cascade through more updates.
if ( type == 'select' ) {
calendar.set( 'highlight', calendarItem.select, options )
}
else if ( type == 'highlight' ) {
calendar.set( 'view', calendarItem.highlight, options )
}
else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {
if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) {
calendar.set( 'select', calendarItem.select, options )
}
if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) {
calendar.set( 'highlight', calendarItem.highlight, options )
}
}
return calendar
} //DatePicker.prototype.set
/**
* Get a datepicker item object.
*/
DatePicker.prototype.get = function( type ) {
return this.item[ type ]
} //DatePicker.prototype.get
/**
* Create a picker date object.
*/
DatePicker.prototype.create = function( type, value, options ) {
var isInfiniteValue,
calendar = this
// If there’s no value, use the type as the value.
value = value === undefined ? type : value
// If it’s infinity, update the value.
if ( value == -Infinity || value == Infinity ) {
isInfiniteValue = value
}
// If it’s an object, use the native date object.
else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {
value = value.obj
}
// If it’s an array, convert it into a date and make sure
// that it’s a valid date – otherwise default to today.
else if ( $.isArray( value ) ) {
value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] )
value = _.isDate( value ) ? value : calendar.create().obj
}
// If it’s a number or date object, make a normalized date.
else if ( _.isInteger( value ) || _.isDate( value ) ) {
value = calendar.normalize( new Date( value ), options )
}
// If it’s a literal true or any other case, set it to now.
else /*if ( value === true )*/ {
value = calendar.now( type, value, options )
}
// Return the compiled object.
return {
year: isInfiniteValue || value.getFullYear(),
month: isInfiniteValue || value.getMonth(),
date: isInfiniteValue || value.getDate(),
day: isInfiniteValue || value.getDay(),
obj: isInfiniteValue || value,
pick: isInfiniteValue || value.getTime()
}
} //DatePicker.prototype.create
/**
* Create a range limit object using an array, date object,
* literal “true”, or integer relative to another time.
*/
DatePicker.prototype.createRange = function( from, to ) {
var calendar = this,
createDate = function( date ) {
if ( date === true || $.isArray( date ) || _.isDate( date ) ) {
return calendar.create( date )
}
return date
}
// Create objects if possible.
if ( !_.isInteger( from ) ) {
from = createDate( from )
}
if ( !_.isInteger( to ) ) {
to = createDate( to )
}
// Create relative dates.
if ( _.isInteger( from ) && $.isPlainObject( to ) ) {
from = [ to.year, to.month, to.date + from ];
}
else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {
to = [ from.year, from.month, from.date + to ];
}
return {
from: createDate( from ),
to: createDate( to )
}
} //DatePicker.prototype.createRange
/**
* Check if a date unit falls within a date range object.
*/
DatePicker.prototype.withinRange = function( range, dateUnit ) {
range = this.createRange(range.from, range.to)
return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick
}
/**
* Check if two date range objects overlap.
*/
DatePicker.prototype.overlapRanges = function( one, two ) {
var calendar = this
// Convert the ranges into comparable dates.
one = calendar.createRange( one.from, one.to )
two = calendar.createRange( two.from, two.to )
return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) ||
calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to )
}
/**
* Get the date today.
*/
DatePicker.prototype.now = function( type, value, options ) {
value = new Date()
if ( options && options.rel ) {
value.setDate( value.getDate() + options.rel )
}
return this.normalize( value, options )
}
/**
* Navigate to next/prev month.
*/
DatePicker.prototype.navigate = function( type, value, options ) {
var targetDateObject,
targetYear,
targetMonth,
targetDate,
isTargetArray = $.isArray( value ),
isTargetObject = $.isPlainObject( value ),
viewsetObject = this.item.view/*,
safety = 100*/
if ( isTargetArray || isTargetObject ) {
if ( isTargetObject ) {
targetYear = value.year
targetMonth = value.month
targetDate = value.date
}
else {
targetYear = +value[0]
targetMonth = +value[1]
targetDate = +value[2]
}
// If we’re navigating months but the view is in a different
// month, navigate to the view’s year and month.
if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) {
targetYear = viewsetObject.year
targetMonth = viewsetObject.month
}
// Figure out the expected target year and month.
targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 )
targetYear = targetDateObject.getFullYear()
targetMonth = targetDateObject.getMonth()
// If the month we’re going to doesn’t have enough days,
// keep decreasing the date until we reach the month’s last date.
while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) {
targetDate -= 1
/*safety -= 1
if ( !safety ) {
throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'
}*/
}
value = [ targetYear, targetMonth, targetDate ]
}
return value
} //DatePicker.prototype.navigate
/**
* Normalize a date by setting the hours to midnight.
*/
DatePicker.prototype.normalize = function( value/*, options*/ ) {
value.setHours( 0, 0, 0, 0 )
return value
}
/**
* Measure the range of dates.
*/
DatePicker.prototype.measure = function( type, value/*, options*/ ) {
var calendar = this
// If it's an integer, get a date relative to today.
if ( _.isInteger( value ) ) {
value = calendar.now( type, value, { rel: value } )
}
// If it’s anything false-y, remove the limits.
else if ( !value ) {
value = type == 'min' ? -Infinity : Infinity
}
// If it’s a string, parse it.
else if ( typeof value == 'string' ) {
value = calendar.parse( type, value )
}
return value
} ///DatePicker.prototype.measure
/**
* Create a viewset object based on navigation.
*/
DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) {
return this.create([ dateObject.year, dateObject.month, 1 ])
}
/**
* Validate a date as enabled and shift if needed.
*/
DatePicker.prototype.validate = function( type, dateObject, options ) {
var calendar = this,
// Keep a reference to the original date.
originalDateObject = dateObject,
// Make sure we have an interval.
interval = options && options.interval ? options.interval : 1,
// Check if the calendar enabled dates are inverted.
isFlippedBase = calendar.item.enable === -1,
// Check if we have any enabled dates after/before now.
hasEnabledBeforeTarget, hasEnabledAfterTarget,
// The min & max limits.
minLimitObject = calendar.item.min,
maxLimitObject = calendar.item.max,
// Check if we’ve reached the limit during shifting.
reachedMin, reachedMax,
// Check if the calendar is inverted and at least one weekday is enabled.
hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {
// If there’s a date, check where it is relative to the target.
if ( $.isArray( value ) ) {
var dateTime = calendar.create( value ).pick
if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true
else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true
}
// Return only integers for enabled weekdays.
return _.isInteger( value )
}).length/*,
safety = 100*/
// Cases to validate for:
// [1] Not inverted and date disabled.
// [2] Inverted and some dates enabled.
// [3] Not inverted and out of range.
//
// Cases to **not** validate for:
// • Navigating months.
// • Not inverted and date enabled.
// • Inverted and all dates disabled.
// • ..and anything else.
if ( !options || (!options.nav && !options.defaultValue) ) if (
/* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||
/* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||
/* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) )
) {
// When inverted, flip the direction if there aren’t any enabled weekdays
// and there are no enabled dates in the direction of the interval.
if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {
interval *= -1
}
// Keep looping until we reach an enabled date.
while ( /*safety &&*/ calendar.disabled( dateObject ) ) {
/*safety -= 1
if ( !safety ) {
throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'
}*/
// If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.
if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) {
dateObject = originalDateObject
interval = interval > 0 ? 1 : -1
}
// If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.
if ( dateObject.pick <= minLimitObject.pick ) {
reachedMin = true
interval = 1
dateObject = calendar.create([
minLimitObject.year,
minLimitObject.month,
minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)
])
}
else if ( dateObject.pick >= maxLimitObject.pick ) {
reachedMax = true
interval = -1
dateObject = calendar.create([
maxLimitObject.year,
maxLimitObject.month,
maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)
])
}
// If we’ve reached both limits, just break out of the loop.
if ( reachedMin && reachedMax ) {
break
}
// Finally, create the shifted date using the interval and keep looping.
dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ])
}
} //endif
// Return the date object settled on.
return dateObject
} //DatePicker.prototype.validate
/**
* Check if a date is disabled.
*/
DatePicker.prototype.disabled = function( dateToVerify ) {
var
calendar = this,
// Filter through the disabled dates to check if this is one.
isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {
// If the date is a number, match the weekday with 0index and `firstDay` check.
if ( _.isInteger( dateToDisable ) ) {
return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7
}
// If it’s an array or a native JS date, create and match the exact date.
if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) {
return dateToVerify.pick === calendar.create( dateToDisable ).pick
}
// If it’s an object, match a date within the “from” and “to” range.
if ( $.isPlainObject( dateToDisable ) ) {
return calendar.withinRange( dateToDisable, dateToVerify )
}
})
// If this date matches a disabled date, confirm it’s not inverted.
isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {
return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' ||
$.isPlainObject( dateToDisable ) && dateToDisable.inverted
}).length
// Check the calendar “enabled” flag and respectively flip the
// disabled state. Then also check if it’s beyond the min/max limits.
return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||
dateToVerify.pick < calendar.item.min.pick ||
dateToVerify.pick > calendar.item.max.pick
} //DatePicker.prototype.disabled
/**
* Parse a string into a usable type.
*/
DatePicker.prototype.parse = function( type, value, options ) {
var calendar = this,
parsingObject = {}
// If it’s already parsed, we’re good.
if ( !value || typeof value != 'string' ) {
return value
}
// We need a `.format` to parse the value with.
if ( !( options && options.format ) ) {
options = options || {}
options.format = calendar.settings.format
}
// Convert the format into an array and then map through it.
calendar.formats.toArray( options.format ).map( function( label ) {
var
// Grab the formatting label.
formattingLabel = calendar.formats[ label ],
// The format length is from the formatting label function or the
// label length without the escaping exclamation (!) mark.
formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length
// If there's a format label, split the value up to the format length.
// Then add it to the parsing object with appropriate label.
if ( formattingLabel ) {
parsingObject[ label ] = value.substr( 0, formatLength )
}
// Update the value as the substring from format length to end.
value = value.substr( formatLength )
})
// Compensate for month 0index.
return [
parsingObject.yyyy || parsingObject.yy,
+( parsingObject.mm || parsingObject.m ) - 1,
parsingObject.dd || parsingObject.d
]
} //DatePicker.prototype.parse
/**
* Various formats to display the object in.
*/
DatePicker.prototype.formats = (function() {
// Return the length of the first word in a collection.
function getWordLengthFromCollection( string, collection, dateObject ) {
// Grab the first word from the string.
// Regex pattern from http://stackoverflow.com/q/150033
var word = string.match( /[^\x00-\x7F]+|[a-zA-Z0-9_\u0080-\u00FF]+/ )[ 0 ]
// If there's no month index, add it to the date object
if ( !dateObject.mm && !dateObject.m ) {
dateObject.m = collection.indexOf( word ) + 1
}
// Return the length of the word.
return word.length
}
// Get the length of the first word in a string.
function getFirstWordLength( string ) {
return string.match( /[a-zA-Z0-9_\u0080-\u00FF]+/ )[ 0 ].length
}
return {
d: function( string, dateObject ) {
// If there's string, then get the digits length.
// Otherwise return the selected date.
return string ? _.digits( string ) : dateObject.date
},
dd: function( string, dateObject ) {
// If there's a string, then the length is always 2.
// Otherwise return the selected date with a leading zero.
return string ? 2 : _.lead( dateObject.date )
},
ddd: function( string, dateObject ) {
// If there's a string, then get the length of the first word.
// Otherwise return the short selected weekday.
return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ]
},
dddd: function( string, dateObject ) {
// If there's a string, then get the length of the first word.
// Otherwise return the full selected weekday.
return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ]
},
m: function( string, dateObject ) {
// If there's a string, then get the length of the digits
// Otherwise return the selected month with 0index compensation.
return string ? _.digits( string ) : dateObject.month + 1
},
mm: function( string, dateObject ) {
// If there's a string, then the length is always 2.
// Otherwise return the selected month with 0index and leading zero.
return string ? 2 : _.lead( dateObject.month + 1 )
},
mmm: function( string, dateObject ) {
var collection = this.settings.monthsShort
// If there's a string, get length of the relevant month from the short
// months collection. Otherwise return the selected month from that collection.
return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]
},
mmmm: function( string, dateObject ) {
var collection = this.settings.monthsFull
// If there's a string, get length of the relevant month from the full
// months collection. Otherwise return the selected month from that collection.
return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]
},
yy: function( string, dateObject ) {
// If there's a string, then the length is always 2.
// Otherwise return the selected year by slicing out the first 2 digits.
return string ? 2 : ( '' + dateObject.year ).slice( 2 )
},
yyyy: function( string, dateObject ) {
// If there's a string, then the length is always 4.
// Otherwise return the selected year.
return string ? 4 : dateObject.year
},
// Create an array by splitting the formatting string passed.
toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) },
// Format an object into a string using the formatting options.
toString: function ( formatString, itemObject ) {
var calendar = this
return calendar.formats.toArray( formatString ).map( function( label ) {
return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' )
}).join( '' )
}
}
})() //DatePicker.prototype.formats
/**
* Check if two date units are the exact.
*/
DatePicker.prototype.isDateExact = function( one, two ) {
var calendar = this
// When we’re working with weekdays, do a direct comparison.
if (
( _.isInteger( one ) && _.isInteger( two ) ) ||
( typeof one == 'boolean' && typeof two == 'boolean' )
) {
return one === two
}
// When we’re working with date representations, compare the “pick” value.
if (
( _.isDate( one ) || $.isArray( one ) ) &&
( _.isDate( two ) || $.isArray( two ) )
) {
return calendar.create( one ).pick === calendar.create( two ).pick
}
// When we’re working with range objects, compare the “from” and “to”.
if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {
return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to )
}
return false
}
/**
* Check if two date units overlap.
*/
DatePicker.prototype.isDateOverlap = function( one, two ) {
var calendar = this,
firstDay = calendar.settings.firstDay ? 1 : 0
// When we’re working with a weekday index, compare the days.
if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {
one = one % 7 + firstDay
return one === calendar.create( two ).day + 1
}
if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {
two = two % 7 + firstDay
return two === calendar.create( one ).day + 1
}
// When we’re working with range objects, check if the ranges overlap.
if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {
return calendar.overlapRanges( one, two )
}
return false
}
/**
* Flip the “enabled” state.
*/
DatePicker.prototype.flipEnable = function(val) {
var itemObject = this.item
itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)
}
/**
* Mark a collection of dates as “disabled”.
*/
DatePicker.prototype.deactivate = function( type, datesToDisable ) {
var calendar = this,
disabledItems = calendar.item.disable.slice(0)
// If we’re flipping, that’s all we need to do.
if ( datesToDisable == 'flip' ) {
calendar.flipEnable()
}
else if ( datesToDisable === false ) {
calendar.flipEnable(1)
disabledItems = []
}
else if ( datesToDisable === true ) {
calendar.flipEnable(-1)
disabledItems = []
}
// Otherwise go through the dates to disable.
else {
datesToDisable.map(function( unitToDisable ) {
var matchFound
// When we have disabled items, check for matches.
// If something is matched, immediately break out.
for ( var index = 0; index < disabledItems.length; index += 1 ) {
if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) {
matchFound = true
break
}
}
// If nothing was found, add the validated unit to the collection.
if ( !matchFound ) {
if (
_.isInteger( unitToDisable ) ||
_.isDate( unitToDisable ) ||
$.isArray( unitToDisable ) ||
( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )
) {
disabledItems.push( unitToDisable )
}
}
})
}
// Return the updated collection.
return disabledItems
} //DatePicker.prototype.deactivate
/**
* Mark a collection of dates as “enabled”.
*/
DatePicker.prototype.activate = function( type, datesToEnable ) {
var calendar = this,
disabledItems = calendar.item.disable,
disabledItemsCount = disabledItems.length
// If we’re flipping, that’s all we need to do.
if ( datesToEnable == 'flip' ) {
calendar.flipEnable()
}
else if ( datesToEnable === true ) {
calendar.flipEnable(1)
disabledItems = []
}
else if ( datesToEnable === false ) {
calendar.flipEnable(-1)
disabledItems = []
}
// Otherwise go through the disabled dates.
else {
datesToEnable.map(function( unitToEnable ) {
var matchFound,
disabledUnit,
index,
isExactRange
// Go through the disabled items and try to find a match.
for ( index = 0; index < disabledItemsCount; index += 1 ) {
disabledUnit = disabledItems[index]
// When an exact match is found, remove it from the collection.
if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) {
matchFound = disabledItems[index] = null
isExactRange = true
break
}
// When an overlapped match is found, add the “inverted” state to it.
else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) {
if ( $.isPlainObject( unitToEnable ) ) {
unitToEnable.inverted = true
matchFound = unitToEnable
}
else if ( $.isArray( unitToEnable ) ) {
matchFound = unitToEnable
if ( !matchFound[3] ) matchFound.push( 'inverted' )
}
else if ( _.isDate( unitToEnable ) ) {
matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]
}
break
}
}
// If a match was found, remove a previous duplicate entry.
if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {
if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) {
disabledItems[index] = null
break
}
}
// In the event that we’re dealing with an exact range of dates,
// make sure there are no “inverted” dates because of it.
if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) {
if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) {
disabledItems[index] = null
break
}
}
// If something is still matched, add it into the collection.
if ( matchFound ) {
disabledItems.push( matchFound )
}
})
}
// Return the updated collection.
return disabledItems.filter(function( val ) { return val != null })
} //DatePicker.prototype.activate
/**
* Create a string for the nodes in the picker.
*/
DatePicker.prototype.nodes = function( isOpen ) {
var
calendar = this,
settings = calendar.settings,
calendarItem = calendar.item,
nowObject = calendarItem.now,
selectedObject = calendarItem.select,
highlightedObject = calendarItem.highlight,
viewsetObject = calendarItem.view,
disabledCollection = calendarItem.disable,
minLimitObject = calendarItem.min,
maxLimitObject = calendarItem.max,
// Create the calendar table head using a copy of weekday labels collection.
// * We do a copy so we don't mutate the original array.
tableHead = (function( collection, fullCollection ) {
// If the first day should be Monday, move Sunday to the end.
if ( settings.firstDay ) {
collection.push( collection.shift() )
fullCollection.push( fullCollection.shift() )
}
// Create and return the table head group.
return _.node(
'thead',
_.node(
'tr',
_.group({
min: 0,
max: DAYS_IN_WEEK - 1,
i: 1,
node: 'th',
item: function( counter ) {
return [
collection[ counter ],
settings.klass.weekdays,
'scope=col title="' + fullCollection[ counter ] + '"'
]
}
})
)
) //endreturn
})( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead
// Create the nav for next/prev month.
createMonthNav = function( next ) {
// Otherwise, return the created month tag.
return _.node(
'div',
' ',
settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + (
// If the focused month is outside the range, disabled the button.
( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) ||
( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ?
' ' + settings.klass.navDisabled : ''
),
'data-nav=' + ( next || -1 ) + ' ' + 'tabindex="0" ' +
_.ariaAttr({
role: 'button',
controls: calendar.$node[0].id + '_table'
}) + ' ' +
'title="' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '"'
) //endreturn
}, //createMonthNav
// Create the month label.
createMonthLabel = function() {
var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull
// If there are months to select, add a dropdown menu.
if ( settings.selectMonths ) {
return _.node( 'select',
_.group({
min: 0,
max: 11,
i: 1,
node: 'option',
item: function( loopedMonth ) {
return [
// The looped month and no classes.
monthsCollection[ loopedMonth ], 0,
// Set the value and selected index.
'value=' + loopedMonth +
( viewsetObject.month == loopedMonth ? ' selected' : '' ) +
(
(
( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) ||
( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month )
) ?
' disabled' : ''
)
]
}
}),
settings.klass.selectMonth,
( isOpen ? '' : 'disabled' ) + ' ' +
_.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +
'title="' + settings.labelMonthSelect + '"'
)
}
// If there's a need for a month selector
return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month )
}, //createMonthLabel
// Create the year label.
createYearLabel = function() {
var focusedYear = viewsetObject.year,
// If years selector is set to a literal "true", set it to 5. Otherwise
// divide in half to get half before and half after focused year.
numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )
// If there are years to select, add a dropdown menu.
if ( numberYears ) {
var
minYear = minLimitObject.year,
maxYear = maxLimitObject.year,
lowestYear = focusedYear - numberYears,
highestYear = focusedYear + numberYears
// If the min year is greater than the lowest year, increase the highest year
// by the difference and set the lowest year to the min year.
if ( minYear > lowestYear ) {
highestYear += minYear - lowestYear
lowestYear = minYear
}
// If the max year is less than the highest year, decrease the lowest year
// by the lower of the two: available and needed years. Then set the
// highest year to the max year.
if ( maxYear < highestYear ) {
var availableYears = lowestYear - minYear,
neededYears = highestYear - maxYear
lowestYear -= availableYears > neededYears ? neededYears : availableYears
highestYear = maxYear
}
return _.node( 'select',
_.group({
min: lowestYear,
max: highestYear,
i: 1,
node: 'option',
item: function( loopedYear ) {
return [
// The looped year and no classes.
loopedYear, 0,
// Set the value and selected index.
'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' )
]
}
}),
settings.klass.selectYear,
( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +
'title="' + settings.labelYearSelect + '"'
)
}
// Otherwise just return the year focused
return _.node( 'div', focusedYear, settings.klass.year )
} //createYearLabel
// Create and return the entire calendar.
return _.node(
'div',
( settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel() ) +
createMonthNav() + createMonthNav( 1 ),
settings.klass.header
) + _.node(
'table',
tableHead +
_.node(
'tbody',
_.group({
min: 0,
max: WEEKS_IN_CALENDAR - 1,
i: 1,
node: 'tr',
item: function( rowCounter ) {
// If Monday is the first day and the month starts on Sunday, shift the date back a week.
var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0
return [
_.group({
min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index
max: function() {
return this.min + DAYS_IN_WEEK - 1
},
i: 1,
node: 'td',
item: function( targetDate ) {
// Convert the time date from a relative date to a target date.
targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ])
var isSelected = selectedObject && selectedObject.pick == targetDate.pick,
isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,
isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,
formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] ),
calendarNodeUniqueId = settings.id + '_' + targetDate.pick
return [
_.node(
'div',
targetDate.date,
(function( klasses ) {
// Add the `infocus` or `outfocus` classes based on month in view.
klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus )
// Add the `today` class if needed.
if ( nowObject.pick == targetDate.pick ) {
klasses.push( settings.klass.now )
}
// Add the `selected` class if something's selected and the time matches.
if ( isSelected ) {
klasses.push( settings.klass.selected )
}
// Add the `highlighted` class if something's highlighted and the time matches.
if ( isHighlighted ) {
klasses.push( settings.klass.highlighted )
}
// Add the `disabled` class if something's disabled and the object matches.
if ( isDisabled ) {
klasses.push( settings.klass.disabled )
}
return klasses.join( ' ' )
})([ settings.klass.day ]),
'data-pick=' + targetDate.pick + ' id=' + calendarNodeUniqueId + ' tabindex="0" ' + _.ariaAttr({
role: 'gridcell',
label: formattedDate,
selected: isSelected && calendar.$node.val() === formattedDate ? true : null,
activedescendant: isHighlighted ? targetDate.pick : null,
disabled: isDisabled ? true : null
})
),
''
] //endreturn
}
})
] //endreturn
}
})
),
settings.klass.table,
'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({
role: 'grid',
controls: calendar.$node[0].id,
readonly: true
})
) +
// * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.
_.node(
'div',
_.node( 'button', settings.today, settings.klass.buttonToday,
'type=button data-pick=' + nowObject.pick +
( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' +
_.ariaAttr({ controls: calendar.$node[0].id }) ) +
_.node( 'button', settings.clear, settings.klass.buttonClear,
'type=button data-clear=1' +
( isOpen ? '' : ' disabled' ) + ' ' +
_.ariaAttr({ controls: calendar.$node[0].id }) ) +
_.node('button', settings.close, settings.klass.buttonClose,
'type=button data-close=true ' +
( isOpen ? '' : ' disabled' ) + ' ' +
_.ariaAttr({ controls: calendar.$node[0].id }) ),
settings.klass.footer
) //endreturn
} //DatePicker.prototype.nodes
/**
* The date picker defaults.
*/
DatePicker.defaults = (function( prefix ) {
return {
// The title label to use for the month nav buttons
labelMonthNext: 'Next month',
labelMonthPrev: 'Previous month',
// The title label to use for the dropdown selectors
labelMonthSelect: 'Select a month',
labelYearSelect: 'Select a year',
// Months and weekdays
monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],
monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],
weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
// Today and clear
today: 'Today',
clear: 'Clear',
close: 'Close',
// Picker close behavior
closeOnSelect: true,
closeOnClear: true,
// Update input value on select/clear
updateInput: true,
// The format to show on the `input` element
format: 'd mmmm, yyyy',
// Classes
klass: {
table: prefix + 'table',
header: prefix + 'header',
navPrev: prefix + 'nav--prev',
navNext: prefix + 'nav--next',
navDisabled: prefix + 'nav--disabled',
month: prefix + 'month',
year: prefix + 'year',
selectMonth: prefix + 'select--month',
selectYear: prefix + 'select--year',
weekdays: prefix + 'weekday',
day: prefix + 'day',
disabled: prefix + 'day--disabled',
selected: prefix + 'day--selected',
highlighted: prefix + 'day--highlighted',
now: prefix + 'day--today',
infocus: prefix + 'day--infocus',
outfocus: prefix + 'day--outfocus',
footer: prefix + 'footer',
buttonClear: prefix + 'button--clear',
buttonToday: prefix + 'button--today',
buttonClose: prefix + 'button--close'
}
}
})( Picker.klasses().picker + '__' )
/**
* Extend the picker to add the date picker.
*/
Picker.extend( 'pickadate', DatePicker )
}));
================================================
FILE: lib/picker.js
================================================
/*!
* pickadate.js v3.6.4, 2019/05/25
* By Amsul, http://amsul.ca
* Hosted on http://amsul.github.io/pickadate.js
* Licensed under MIT
*/
(function ( factory ) {
// AMD.
if ( typeof define == 'function' && define.amd )
define( 'picker', ['jquery'], factory )
// Node.js/browserify.
else if ( typeof exports == 'object' )
module.exports = factory( require('jquery') )
// Browser globals.
else if ( typeof window == 'object' )
window.Picker = factory( jQuery )
else this.Picker = factory( jQuery )
}(function( $ ) {
var $window = $( window )
var $document = $( document )
var $html = $( document.documentElement )
var supportsTransitions = document.documentElement.style.transition != null
/**
* The picker constructor that creates a blank picker.
*/
function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
// If there’s no element, return the picker constructor.
if ( !ELEMENT ) return PickerConstructor
var
IS_DEFAULT_THEME = false,
// The state of the picker.
STATE = {
id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) ),
handlingOpen: false,
},
// Merge the defaults and options passed.
SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},
// Merge the default classes with the settings classes.
CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),
// The element node wrapper into a jQuery object.
$ELEMENT = $( ELEMENT ),
// Pseudo picker constructor.
PickerInstance = function() {
return this.start()
},
// The picker prototype.
P = PickerInstance.prototype = {
constructor: PickerInstance,
$node: $ELEMENT,
/**
* Initialize everything
*/
start: function() {
// If it’s already started, do nothing.
if ( STATE && STATE.start ) return P
// Update the picker states.
STATE.methods = {}
STATE.start = true
STATE.open = false
STATE.type = ELEMENT.type
// Confirm focus state, convert into text input to remove UA stylings,
// and set as readonly to prevent keyboard popup.
ELEMENT.autofocus = ELEMENT == getActiveElement()
ELEMENT.readOnly = !SETTINGS.editable
SETTINGS.id = ELEMENT.id = ELEMENT.id || STATE.id
if ( ELEMENT.type != 'text' ) {
ELEMENT.type = 'text'
}
// Create a new picker component with the settings.
P.component = new COMPONENT(P, SETTINGS)
// Create the picker root and then prepare it.
P.$root = $( '<div class="' + CLASSES.picker + '" id="' + ELEMENT.id + '_root" />' )
prepareElementRoot()
// Create the picker holder and then prepare it.
P.$holder = $( createWrappedComponent() ).appendTo( P.$root )
prepareElementHolder()
// If there’s a format for the hidden input element, create the element.
if ( SETTINGS.formatSubmit ) {
prepareElementHidden()
}
// Prepare the input element.
prepareElement()
// Insert the hidden input as specified in the settings.
if ( SETTINGS.containerHidden ) $( SETTINGS.containerHidden ).append( P._hidden )
else $ELEMENT.after( P._hidden )
// Insert the root as specified in the settings.
if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )
else $ELEMENT.after( P.$root )
// Bind the default component and settings events.
P.on({
start: P.component.onStart,
render: P.component.onRender,
stop: P.component.onStop,
open: P.component.onOpen,
close: P.component.onClose,
set: P.component.onSet
}).on({
start: SETTINGS.onStart,
render: SETTINGS.onRender,
stop: SETTINGS.onStop,
open: SETTINGS.onOpen,
close: SETTINGS.onClose,
set: SETTINGS.onSet
})
// Once we’re all set, check the theme in use.
IS_DEFAULT_THEME = isUsingDefaultTheme( P.$holder[0] )
// If the element has autofocus, open the picker.
if ( ELEMENT.autofocus ) {
P.open()
}
// Trigger queued the “start” and “render” events.
return P.trigger( 'start' ).trigger( 'render' )
}, //start
/**
* Render a new picker
*/
render: function( entireComponent ) {
// Insert a new component holder in the root or box.
if ( entireComponent ) {
P.$holder = $( createWrappedComponent() )
prepareElementHolder()
P.$root.html( P.$holder )
}
else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )
// Trigger the queued “render” events.
return P.trigger( 'render' )
}, //render
/**
* Destroy everything
*/
stop: function() {
// If it’s already stopped, do nothing.
if ( !STATE.start ) return P
// Then close the picker.
P.close()
// Remove the hidden field.
if ( P._hidden ) {
P._hidden.parentNode.removeChild( P._hidden )
}
// Remove the root.
P.$root.remove()
// Remove the input class, remove the stored data, and unbind
// the events (after a tick for IE - see `P.close`).
$ELEMENT.removeClass( CLASSES.input ).removeData( NAME )
setTimeout( function() {
$ELEMENT.off( '.' + STATE.id )
}, 0)
// Restore the element state
ELEMENT.type = STATE.type
ELEMENT.readOnly = false
// Trigger the queued “stop” events.
P.trigger( 'stop' )
// Reset the picker states.
STATE.methods = {}
STATE.start = false
return P
}, //stop
/**
* Open up the picker
*/
open: function( dontGiveFocus ) {
// If it’s already open, do nothing.
if ( STATE.open ) return P
// Add the “active” class.
$ELEMENT.addClass( CLASSES.active )
// * A Firefox bug, when `html` has `overflow:hidden`, results in
// killing transitions :(. So add the “opened” state on the next tick.
// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289
setTimeout( function() {
// Add the “opened” class to the picker root.
P.$root.addClass( CLASSES.opened )
aria( P.$root[0], 'hidden', false )
}, 0 )
// If we have to give focus, bind the element and doc events.
if ( dontGiveFocus !== false ) {
// Set it as open.
STATE.open = true
// Prevent the page from scrolling.
if ( IS_DEFAULT_THEME ) {
$('body').
css( 'overflow', 'hidden' ).
css( 'padding-right', '+=' + getScrollbarWidth() )
}
// Pass focus to the root element’s jQuery object.
focusPickerOnceOpened()
// Bind the document events.
$document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {
// If the picker is currently midway through processing
// the opening sequence of events then don't handle clicks
// on any part of the DOM. This is caused by a bug in Chrome 73
// where a click event is being generated with the incorrect
// path in it.
// In short, if someone does a click that finishes after the
// new element is created then the path contains only the
// parent element and not the input element itself.
if (STATE.handlingOpen) {
return;
}
var target = getRealEventTarget( event, ELEMENT )
// If the target of the event is not the element, close the picker picker.
// * Don’t worry about clicks or focusins on the root because those don’t bubble up.
// Also, for Firefox, a click on an `option` element bubbles up directly
// to the doc. So make sure the target wasn't the doc.
// * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,
// which causes the picker to unexpectedly close when right-clicking it. So make
// sure the event wasn’t a right-click.
// * In Chrome 62 and up, password autofill causes a simulated focusin event which
// closes the picker.
if ( ! event.isSimulated && target != ELEMENT && target != document && event.which != 3 ) {
// If the target was the holder that covers the screen,
// keep the element focused to maintain tabindex.
P.close( target === P.$holder[0] )
}
}).on( 'keydown.' + STATE.id, function( event ) {
var
// Get the keycode.
keycode = event.keyCode,
// Translate that to a selection change.
keycodeToMove = P.component.key[ keycode ],
// Grab the target.
target = getRealEventTarget( event, ELEMENT )
// On escape, close the picker and give focus.
if ( keycode == 27 ) {
P.close( true )
}
// Check if there is a key movement or “enter” keypress on the element.
else if ( target == P.$holder[0] && ( keycodeToMove || keycode == 13 ) ) {
// Prevent the default action to stop page movement.
event.preventDefault()
// Trigger the key movement action.
if ( keycodeToMove ) {
PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )
}
// On “enter”, if the highlighted item isn’t disabled, set the value and close.
else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {
P.set( 'select', P.component.item.highlight )
if ( SETTINGS.closeOnSelect ) {
P.close( true )
}
}
}
// If the target is within the root and “enter” is pressed,
// prevent the default action and trigger a click on the target instead.
else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {
event.preventDefault()
target.click()
}
})
}
// Trigger the queued “open” events.
return P.trigger( 'open' )
}, //open
/**
* Close the picker
*/
close: function( giveFocus ) {
// If we need to give focus, do it before changing states.
if ( giveFocus ) {
if ( SETTINGS.editable ) {
ELEMENT.focus()
}
else {
// ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|
// The focus is triggered *after* the close has completed - causing it
// to open again. So unbind and rebind the event at the next tick.
P.$holder.off( 'focus.toOpen' ).focus()
setTimeout( function() {
P.$holder.on( 'focus.toOpen', handleFocusToOpenEvent )
}, 0 )
}
}
// Remove the “active” class.
$ELEMENT.removeClass( CLASSES.active )
// * A Firefox bug, when `html` has `overflow:hidden`, results in
// killing transitions :(. So remove the “opened” state on the next tick.
// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289
setTimeout( function() {
// Remove the “opened” and “focused” class from the picker root.
P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )
aria( P.$root[0], 'hidden', true )
}, 0 )
// If it’s already closed, do nothing more.
if ( !STATE.open ) return P
// Set it as closed.
STATE.open = false
// Allow the page to scroll.
if ( IS_DEFAULT_THEME ) {
$('body').
css( 'overflow', '' ).
css( 'padding-right', '-=' + getScrollbarWidth() )
}
// Unbind the document events.
$document.off( '.' + STATE.id )
// Trigger the queued “close” events.
return P.trigger( 'close' )
}, //close
/**
* Clear the values
*/
clear: function( options ) {
return P.set( 'clear', null, options )
}, //clear
/**
* Set something
*/
set: function( thing, value, options ) {
var thingItem, thingValue,
thingIsObject = $.isPlainObject( thing ),
thingObject = thingIsObject ? thing : {}
// Make sure we have usable options.
options = thingIsObject && $.isPlainObject( value ) ? value : options || {}
if ( thing ) {
// If the thing isn’t an object, make it one.
if ( !thingIsObject ) {
thingObject[ thing ] = value
}
// Go through the things of items to set.
for ( thingItem in thingObject ) {
// Grab the value of the thing.
thingValue = thingObject[ thingItem ]
// First, if the item exists and there’s a value, set it.
if ( thingItem in P.component.item ) {
if ( thingValue === undefined ) thingValue = null
P.component.set( thingItem, thingValue, options )
}
// Then, check to update the element value and broadcast a change.
if ( ( thingItem == 'select' || thingItem == 'clear' ) && SETTINGS.updateInput ) {
$ELEMENT.
val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).
trigger( 'change' )
}
}
// Render a new picker.
P.render()
}
// When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.
return options.muted ? P : P.trigger( 'set', thingObject )
}, //set
/**
* Get something
*/
get: function( thing, format ) {
// Make sure there’s something to get.
thing = thing || 'value'
// If a picker state exists, return that.
if ( STATE[ thing ] != null ) {
return STATE[ thing ]
}
// Return the submission value, if that.
if ( thing == 'valueSubmit' ) {
if ( P._hidden ) {
return P._hidden.value
}
thing = 'value'
}
// Return the value, if that.
if ( thing == 'value' ) {
return ELEMENT.value
}
// Check if a component item exists, return that.
if ( thing in P.component.item ) {
if ( typeof format == 'string' ) {
var thingValue = P.component.get( thing )
return thingValue ?
PickerConstructor._.trigger(
P.component.formats.toString,
P.component,
[ format, thingValue ]
) : ''
}
return P.component.get( thing )
}
}, //get
/**
* Bind events on the things.
*/
on: function( thing, method, internal ) {
var thingName, thingMethod,
thingIsObject = $.isPlainObject( thing ),
thingObject = thingIsObject ? thing : {}
if ( thing ) {
// If the thing isn’t an object, make it one.
if ( !thingIsObject ) {
thingObject[ thing ] = method
}
// Go through the things to bind to.
for ( thingName in thingObject ) {
// Grab the method of the thing.
thingMethod = thingObject[ thingName ]
// If it was an internal binding, prefix it.
if ( internal ) {
thingName = '_' + thingName
}
// Make sure the thing methods collection exists.
STATE.methods[ thingName ] = STATE.methods[ thingName ] || []
// Add the method to the relative method collection.
STATE.methods[ thingName ].push( thingMethod )
}
}
return P
}, //on
/**
* Unbind events on the things.
*/
off: function() {
var i, thingName,
names = arguments;
for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {
thingName = names[i]
if ( thingName in STATE.methods ) {
delete STATE.methods[thingName]
}
}
return P
},
/**
* Fire off method events.
*/
trigger: function( name, data ) {
var _trigger = function( name ) {
var methodList = STATE.methods[ name ]
if ( methodList ) {
methodList.map( function( method ) {
PickerConstructor._.trigger( method, P, [ data ] )
})
}
}
_trigger( '_' + name )
_trigger( name )
return P
} //trigger
} //PickerInstance.prototype
/**
* Wrap the picker holder components together.
*/
function createWrappedComponent() {
// Create a picker wrapper holder
return PickerConstructor._.node( 'div',
// Create a picker wrapper node
PickerConstructor._.node( 'div',
// Create a picker frame
PickerConstructor._.node( 'div',
// Create a picker box node
PickerConstructor._.node( 'div',
// Create the components nodes.
P.component.nodes( STATE.open ),
// The picker box class
CLASSES.box
),
// Picker wrap class
CLASSES.wrap
),
// Picker frame class
CLASSES.frame
),
// Picker holder class
CLASSES.holder,
'tabindex="-1"'
) //endreturn
} //createWrappedComponent
/**
* Prepare the input element with all bindings.
*/
function prepareElement() {
$ELEMENT.
// Store the picker data by component name.
data(NAME, P).
// Add the “input” class name.
addClass(CLASSES.input).
// If there’s a `data-value`, update the value of the element.
val( $ELEMENT.data('value') ?
P.get('select', SETTINGS.format) :
ELEMENT.value
).
// On focus/click, open the picker.
on( 'focus.' + STATE.id + ' click.' + STATE.id,
function(event) {
event.preventDefault()
P.open()
}
)
// Mousedown handler to capture when the user starts interacting
// with the picker. This is used in working around a bug in Chrome 73.
.on('mousedown', function() {
STATE.handlingOpen = true;
var handler = function() {
// By default mouseup events are fired before a click event.
// By using a timeout we can force the mouseup to be handled
// after the corresponding click event is handled.
setTimeout(function() {
$(document).off('mouseup', handler);
STATE.handlingOpen = false;
}, 0);
};
$(document).on('mouseup', handler);
});
// Only bind keydown events if the element isn’t editable.
if ( !SETTINGS.editable ) {
$ELEMENT.
// Handle keyboard event based on the picker being opened or not.
on( 'keydown.' + STATE.id, handleKeydownEvent )
}
// Update the aria attributes.
aria(ELEMENT, {
haspopup: true,
readonly: false,
owns: ELEMENT.id + '_root'
})
}
/**
* Prepare the root picker element with all bindings.
*/
function prepareElementRoot() {
aria( P.$root[0], 'hidden', true )
}
/**
* Prepare the holder picker element with all bindings.
*/
function prepareElementHolder() {
P.$holder.
on({
// For iOS8.
keydown: handleKeydownEvent,
'focus.toOpen': handleFocusToOpenEvent,
blur: function() {
// Remove the “target” class.
$ELEMENT.removeClass( CLASSES.target )
},
// When something within the holder is focused, stop from bubbling
// to the doc and remove the “focused” state from the root.
focusin: function( event ) {
P.$root.removeClass( CLASSES.focused )
event.stopPropagation()
},
// When something within the holder is clicked, stop it
// from bubbling to the doc.
'mousedown click': function( event ) {
var target = getRealEventTarget( event, ELEMENT )
// Make sure the target isn’t the root holder so it can bubble up.
if ( target != P.$holder[0] ) {
event.stopPropagation()
// * For mousedown events, cancel the default action in order to
// prevent cases where focus is shifted onto external elements
// when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).
// Also, for Firefox, don’t prevent action on the `option` element.
if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {
event.preventDefault()
// Re-focus onto the holder so that users can click away
// from elements focused within the picker.
P.$holder.eq(0).focus()
}
}
}
}).
// If there’s a click on an actionable element, carry out the actions.
on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {
var $target = $( this ),
targetData = $target.data(),
targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),
// * For IE, non-focusable elements can be active elements as well
// (http://stackoverflow.com/a/2684561).
activeElement = getActiveElement()
activeElement = activeElement && ( (activeElement.type || activeElement.href ) ? activeElement : null);
// If it’s disabled or nothing inside is actively focused, re-focus the element.
if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {
P.$holder.eq(0).focus()
}
// If something is superficially changed, update the `highlight` based on the `nav`.
if ( !targetDisabled && targetData.nav ) {
P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )
}
// If something is picked, set `select` then close with focus.
else if ( !targetDisabled && 'pick' in targetData ) {
P.set( 'select', targetData.pick )
if ( SETTINGS.closeOnSelect ) {
P.close( true )
}
}
// If a “clear” button is pressed, empty the values and close with focus.
else if ( targetData.clear ) {
P.clear()
if ( SETTINGS.closeOnClear ) {
P.close( true )
}
}
else if ( targetData.close ) {
P.close( true )
}
}) //P.$holder
}
/**
* Prepare the hidden input element along with all bindings.
*/
function prepareElementHidden() {
var name
if ( SETTINGS.hiddenName === true ) {
name = ELEMENT.name
ELEMENT.name = ''
}
else {
name = [
typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',
typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'
]
name = name[0] + ELEMENT.name + name[1]
}
P._hidden = $(
'<input ' +
'type=hidden ' +
// Create the name using the original input’s with a prefix and suffix.
'name="' + name + '"' +
// If the element has a value, set the hidden value as well.
(
$ELEMENT.data('value') || ELEMENT.value ?
' value="' + P.get('select', SETTINGS.formatSubmit) + '"' :
''
) +
'>'
)[0]
$ELEMENT.
// If the value changes, update the hidden input with the correct format.
on('change.' + STATE.id, function() {
P._hidden.value = ELEMENT.value ?
P.get('select', SETTINGS.formatSubmit) :
''
})
}
// Wait for transitions to end before focusing the holder. Otherwise, while
// using the `container` option, the view jumps to the container.
function focusPickerOnceOpened() {
if (IS_DEFAULT_THEME && supportsTransitions) {
P.$holder.find('.' + CLASSES.frame).one('transitionend', function() {
P.$holder.eq(0).focus()
})
}
else {
setTimeout(function() {
P.$holder.eq(0).focus()
}, 0)
}
}
function handleFocusToOpenEvent(event) {
// Stop the event from propagating to the doc.
event.stopPropagation()
// Add the “target” class.
$ELEMENT.addClass( CLASSES.target )
// Add the “focused” class to the root.
P.$root.addClass( CLASSES.focused )
// And then finally open the picker.
P.open()
}
// For iOS8.
function handleKeydownEvent( event ) {
var keycode = event.keyCode,
// Check if one of the delete keys was pressed.
isKeycodeDelete = /^(8|46)$/.test(keycode)
// For some reason IE clears the input value on “escape”.
if ( keycode == 27 ) {
P.close( true )
return false
}
// Check if `space` or `delete` wa
gitextract_wdcyfm8v/ ├── .gitignore ├── .jshintrc ├── .travis.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Gruntfile.js ├── LICENSE.md ├── README.md ├── bower.json ├── lib/ │ ├── compressed/ │ │ ├── legacy.js │ │ ├── picker.date.js │ │ ├── picker.js │ │ ├── picker.time.js │ │ ├── themes/ │ │ │ ├── classic.css │ │ │ ├── classic.date.css │ │ │ ├── classic.time.css │ │ │ ├── default.css │ │ │ ├── default.date.css │ │ │ ├── default.time.css │ │ │ └── rtl.css │ │ └── translations/ │ │ ├── ar.js │ │ ├── bg_BG.js │ │ ├── bs_BA.js │ │ ├── ca_ES.js │ │ ├── cs_CZ.js │ │ ├── da_DK.js │ │ ├── de_DE.js │ │ ├── el_GR.js │ │ ├── es_ES.js │ │ ├── et_EE.js │ │ ├── eu_ES.js │ │ ├── fa_IR.js │ │ ├── fi_FI.js │ │ ├── fr_FR.js │ │ ├── ge_GEO.js │ │ ├── gl_ES.js │ │ ├── he_IL.js │ │ ├── hi_IN.js │ │ ├── hr_HR.js │ │ ├── hu_HU.js │ │ ├── id_ID.js │ │ ├── is_IS.js │ │ ├── it_IT.js │ │ ├── ja_JP.js │ │ ├── km_KH.js │ │ ├── ko_KR.js │ │ ├── lt_LT.js │ │ ├── lv_LV.js │ │ ├── nb_NO.js │ │ ├── ne_NP.js │ │ ├── nl_NL.js │ │ ├── no_NO.js │ │ ├── pl_PL.js │ │ ├── pt_BR.js │ │ ├── pt_PT.js │ │ ├── ro_RO.js │ │ ├── ru_RU.js │ │ ├── sk_SK.js │ │ ├── sl_SI.js │ │ ├── sr_RS_cy.js │ │ ├── sr_RS_lt.js │ │ ├── sv_SE.js │ │ ├── th_TH.js │ │ ├── tr_TR.js │ │ ├── uk_UA.js │ │ ├── vi_VN.js │ │ ├── zh_CN.js │ │ └── zh_TW.js │ ├── legacy.js │ ├── picker.date.js │ ├── picker.js │ ├── picker.time.js │ ├── themes/ │ │ ├── classic.css │ │ ├── classic.date.css │ │ ├── classic.time.css │ │ ├── default.css │ │ ├── default.date.css │ │ ├── default.time.css │ │ └── rtl.css │ ├── themes-source/ │ │ ├── _variables.less │ │ ├── base.date.less │ │ ├── base.less │ │ ├── base.time.less │ │ ├── classic.date.less │ │ ├── classic.less │ │ ├── classic.time.less │ │ ├── default.date.less │ │ ├── default.less │ │ ├── default.time.less │ │ └── rtl.less │ └── translations/ │ ├── FORMATTING.md │ ├── NAMING.md │ ├── ar.js │ ├── bg_BG.js │ ├── bs_BA.js │ ├── ca_ES.js │ ├── cs_CZ.js │ ├── da_DK.js │ ├── de_DE.js │ ├── el_GR.js │ ├── es_ES.js │ ├── et_EE.js │ ├── eu_ES.js │ ├── fa_IR.js │ ├── fi_FI.js │ ├── fr_FR.js │ ├── ge_GEO.js │ ├── gl_ES.js │ ├── he_IL.js │ ├── hi_IN.js │ ├── hr_HR.js │ ├── hu_HU.js │ ├── id_ID.js │ ├── is_IS.js │ ├── it_IT.js │ ├── ja_JP.js │ ├── km_KH.js │ ├── ko_KR.js │ ├── lt_LT.js │ ├── lv_LV.js │ ├── nb_NO.js │ ├── ne_NP.js │ ├── nl_NL.js │ ├── pl_PL.js │ ├── pt_BR.js │ ├── pt_PT.js │ ├── ro_RO.js │ ├── ru_RU.js │ ├── sk_SK.js │ ├── sl_SI.js │ ├── sr_RS_cy.js │ ├── sr_RS_lt.js │ ├── sv_SE.js │ ├── th_TH.js │ ├── tr_TR.js │ ├── uk_UA.js │ ├── vi_VN.js │ ├── zh_CN.js │ └── zh_TW.js ├── package.json ├── tests/ │ ├── dev/ │ │ ├── date.htm │ │ └── time.htm │ └── units/ │ ├── all.htm │ ├── base.js │ ├── date.js │ └── time.js ├── version-bump.js └── version-commit.js
SYMBOL INDEX (29 symbols across 8 files)
FILE: lib/compressed/picker.date.js
function c (line 5) | function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"...
function a (line 5) | function a(a,b,c){var d=a.match(/[^\x00-\x7F]+|\w+/)[0];return c.mm||c.m...
function b (line 5) | function b(a){return a.match(/\w+/)[0].length}
FILE: lib/compressed/picker.js
function b (line 7) | function b(g,h,j,l){function n(){return b._.node("div",b._.node("div",b....
function c (line 7) | function c(a){var b,c="position";return a.currentStyle?b=a.currentStyle[...
function d (line 7) | function d(){if(l.height()<=j.height())return 0;var b=a('<div style="vis...
function e (line 7) | function e(a,b){var c=[];return a.path&&(c=a.path),a.originalEvent&&a.or...
function f (line 7) | function f(b,c,d){if(a.isPlainObject(c))for(var e in c)g(b,e,c[e]);else ...
function g (line 7) | function g(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}
function h (line 7) | function h(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in ...
function i (line 7) | function i(){try{return document.activeElement}catch(a){}}
FILE: lib/compressed/picker.time.js
function c (line 5) | function c(a,b){var c=this,d=a.$node[0].value,e=a.$node.data("value"),f=...
FILE: lib/picker.date.js
function DatePicker (line 34) | function DatePicker( picker, settings ) {
function getWordLengthFromCollection (line 647) | function getWordLengthFromCollection( string, collection, dateObject ) {
function getFirstWordLength (line 663) | function getFirstWordLength( string ) {
FILE: lib/picker.js
function PickerConstructor (line 35) | function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
function isUsingDefaultTheme (line 937) | function isUsingDefaultTheme( element ) {
function getScrollbarWidth (line 961) | function getScrollbarWidth() {
function getRealEventTarget (line 996) | function getRealEventTarget( event, ELEMENT ) {
function aria (line 1177) | function aria(element, attribute, value) {
function ariaSet (line 1187) | function ariaSet(element, attribute, value) {
function ariaAttr (line 1193) | function ariaAttr(attribute, data) {
function getActiveElement (line 1207) | function getActiveElement() {
FILE: lib/picker.time.js
function TimePicker (line 36) | function TimePicker( picker, settings ) {
FILE: version-bump.js
function bumpVersion (line 35) | function bumpVersion(release) {
function readPackageVersion (line 48) | function readPackageVersion() {
function writePackageVersion (line 54) | function writePackageVersion(version) {
function updateLibraryFiles (line 61) | function updateLibraryFiles(version) {
FILE: version-commit.js
function commitAndTag (line 17) | function commitAndTag(version) {
Condensed preview — 148 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (467K chars).
[
{
"path": ".gitignore",
"chars": 83,
"preview": "\n*.DS_Store\n\n*.sublime-project\n\n*.sublime-workspace\n\nnode_modules/*\n\n*.log\n\n.idea/\n"
},
{
"path": ".jshintrc",
"chars": 118,
"preview": "{\n \"debug\": true,\n \"devel\": true,\n \"browser\": true,\n \"asi\": true,\n \"unused\": true,\n \"eqnull\": true\n}"
},
{
"path": ".travis.yml",
"chars": 140,
"preview": "\nlanguage: node_js\nnode_js:\n - 8\nbefore_script:\n - npm install -g grunt-cli\nbefore_install: npm install -g npm@lat"
},
{
"path": "CHANGELOG.md",
"chars": 17237,
"preview": "# Changelog\n\n## 3.5.6\n\n- [#667](https://github.com/amsul/pickadate.js/issues/667) Fixed issue where script was executed "
},
{
"path": "CONTRIBUTING.md",
"chars": 2348,
"preview": "# Contributing\n\nWant to help contribute something to the project? Awesome! :smile:\n\nPlease take a moment to review this "
},
{
"path": "Gruntfile.js",
"chars": 4639,
"preview": "\n/*!\n * This Gruntfile is used to build the project files.\n */\n\n/*jshint\n node: true\n */\n\n\nmodule.exports = function("
},
{
"path": "LICENSE.md",
"chars": 1061,
"preview": "Copyright 2014 Amsul, http://amsul.ca\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of t"
},
{
"path": "README.md",
"chars": 4081,
"preview": "# pickadate [](https://travis-ci.org/"
},
{
"path": "bower.json",
"chars": 1196,
"preview": "{\n \"name\": \"pickadate\",\n \"description\": \"The mobile-friendly, responsive, and lightweight jQuery date & time input pic"
},
{
"path": "lib/compressed/legacy.js",
"chars": 1887,
"preview": "/*!\n * Legacy browser support\n */\n[].map||(Array.prototype.map=function(a,b){for(var c=this,d=c.length,e=new Array(d),f="
},
{
"path": "lib/compressed/picker.date.js",
"chars": 12796,
"preview": "/*!\n * Date picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/date.htm\n */\n!function(a){\"function\"=="
},
{
"path": "lib/compressed/picker.js",
"chars": 8653,
"preview": "/*!\n * pickadate.js v3.6.4, 2019/05/25\n * By Amsul, http://amsul.ca\n * Hosted on http://amsul.github.io/pickadate.js\n * "
},
{
"path": "lib/compressed/picker.time.js",
"chars": 9081,
"preview": "/*!\n * Time picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/time.htm\n */\n!function(a){\"function\"=="
},
{
"path": "lib/compressed/themes/classic.css",
"chars": 1365,
"preview": ".picker,.picker__holder{width:100%;position:absolute}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000;z"
},
{
"path": "lib/compressed/themes/classic.date.css",
"chars": 4239,
"preview": ".picker__footer,.picker__header,.picker__table{text-align:center}.picker__box{padding:0 1em}.picker__header{position:rel"
},
{
"path": "lib/compressed/themes/classic.time.css",
"chars": 1676,
"preview": ".picker__list{list-style:none;padding:.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #ddd;border-top:"
},
{
"path": "lib/compressed/themes/default.css",
"chars": 1982,
"preview": ".picker{font-size:16px;text-align:left;line-height:1.2;color:#000;position:absolute;z-index:10000;-webkit-user-select:no"
},
{
"path": "lib/compressed/themes/default.date.css",
"chars": 4239,
"preview": ".picker__footer,.picker__header,.picker__table{text-align:center}.picker__box{padding:0 1em}.picker__header{position:rel"
},
{
"path": "lib/compressed/themes/default.time.css",
"chars": 1655,
"preview": ".picker__list{list-style:none;padding:.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #ddd;border-top:"
},
{
"path": "lib/compressed/themes/rtl.css",
"chars": 313,
"preview": "/*!\n * Styling for RTL (right-to-left) languages using pickadate.js\n */.picker{direction:rtl}.picker__nav--next{right:au"
},
{
"path": "lib/compressed/translations/ar.js",
"chars": 566,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"يناير\",\"فبراير\",\"مارس\",\"ابريل\",\"مايو\",\"يونيو\",\"يوليو\",\"اغسطس\",\""
},
{
"path": "lib/compressed/translations/bg_BG.js",
"chars": 540,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"януари\",\"февруари\",\"март\",\"април\",\"май\",\"юни\",\"юли\",\"август\",\"с"
},
{
"path": "lib/compressed/translations/bs_BA.js",
"chars": 547,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"mart\",\"april\",\"maj\",\"juni\",\"juli\",\"august\",\""
},
{
"path": "lib/compressed/translations/ca_ES.js",
"chars": 574,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Gener\",\"Febrer\",\"Març\",\"Abril\",\"Maig\",\"juny\",\"Juliol\",\"Agost\",\""
},
{
"path": "lib/compressed/translations/cs_CZ.js",
"chars": 545,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"leden\",\"únor\",\"březen\",\"duben\",\"květen\",\"červen\",\"červenec\",\"sr"
},
{
"path": "lib/compressed/translations/da_DK.js",
"chars": 548,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"marts\",\"april\",\"maj\",\"juni\",\"juli\",\"august\","
},
{
"path": "lib/compressed/translations/de_DE.js",
"chars": 581,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\""
},
{
"path": "lib/compressed/translations/el_GR.js",
"chars": 581,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Ιανουάριος\",\"Φεβρουάριος\",\"Μάρτιος\",\"Απρίλιος\",\"Μάιος\",\"Ιούνιος"
},
{
"path": "lib/compressed/translations/es_ES.js",
"chars": 572,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Enero\",\"Febrero\",\"Marzo\",\"Abril\",\"Mayo\",\"Junio\",\"Julio\",\"Agosto"
},
{
"path": "lib/compressed/translations/et_EE.js",
"chars": 574,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"jaanuar\",\"veebruar\",\"märts\",\"aprill\",\"mai\",\"juuni\",\"juuli\",\"aug"
},
{
"path": "lib/compressed/translations/eu_ES.js",
"chars": 581,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"urtarrila\",\"otsaila\",\"martxoa\",\"apirila\",\"maiatza\",\"ekaina\",\"uz"
},
{
"path": "lib/compressed/translations/fa_IR.js",
"chars": 625,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"ژانویه\",\"فوریه\",\"مارس\",\"آوریل\",\"مه\",\"ژوئن\",\"ژوئیه\",\"اوت\",\"سپتام"
},
{
"path": "lib/compressed/translations/fi_FI.js",
"chars": 592,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"tammikuu\",\"helmikuu\",\"maaliskuu\",\"huhtikuu\",\"toukokuu\",\"kesäkuu"
},
{
"path": "lib/compressed/translations/fr_FR.js",
"chars": 723,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Janvier\",\"Février\",\"Mars\",\"Avril\",\"Mai\",\"Juin\",\"Juillet\",\"Août\""
},
{
"path": "lib/compressed/translations/ge_GEO.js",
"chars": 574,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"იანვარი\",\"თებერვალი\",\"მარტი\",\"აპრილი\",\"მაისი\",\"ივნისი\",\"ივლისი\""
},
{
"path": "lib/compressed/translations/gl_ES.js",
"chars": 552,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Xaneiro\",\"Febreiro\",\"Marzo\",\"Abril\",\"Maio\",\"Xuño\",\"Xullo\",\"Agos"
},
{
"path": "lib/compressed/translations/he_IL.js",
"chars": 518,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"ינואר\",\"פברואר\",\"מרץ\",\"אפריל\",\"מאי\",\"יוני\",\"יולי\",\"אוגוסט\",\"ספט"
},
{
"path": "lib/compressed/translations/hi_IN.js",
"chars": 774,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"जनवरी\",\"फरवरी\",\"मार्च\",\"अप्रैल\",\"मई\",\"जून\",\"जुलाई\",\"अगस्त\",\"सित"
},
{
"path": "lib/compressed/translations/hr_HR.js",
"chars": 577,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"siječanj\",\"veljača\",\"ožujak\",\"travanj\",\"svibanj\",\"lipanj\",\"srpa"
},
{
"path": "lib/compressed/translations/hu_HU.js",
"chars": 565,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"január\",\"február\",\"március\",\"április\",\"május\",\"június\",\"július\""
},
{
"path": "lib/compressed/translations/id_ID.js",
"chars": 543,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Januari\",\"Februari\",\"Maret\",\"April\",\"Mei\",\"Juni\",\"Juli\",\"Agustu"
},
{
"path": "lib/compressed/translations/is_IS.js",
"chars": 571,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"janúar\",\"febrúar\",\"mars\",\"apríl\",\"maí\",\"júní\",\"júlí\",\"ágúst\",\"s"
},
{
"path": "lib/compressed/translations/it_IT.js",
"chars": 751,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\""
},
{
"path": "lib/compressed/translations/ja_JP.js",
"chars": 449,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],"
},
{
"path": "lib/compressed/translations/km_KH.js",
"chars": 698,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"មករា\",\"កុម្ភៈ\",\"មីនា\",\"មេសា\",\"ឧសភា\",\"មិថុនា\",\"កក្កដា\",\"សីហា\",\"ក"
},
{
"path": "lib/compressed/translations/ko_KR.js",
"chars": 442,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\",\"12월\"],"
},
{
"path": "lib/compressed/translations/lt_LT.js",
"chars": 759,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{labelMonthNext:\"Sekantis mėnuo\",labelMonthPrev:\"Ankstesnis mėnuo\",labelMonth"
},
{
"path": "lib/compressed/translations/lv_LV.js",
"chars": 730,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Janvāris\",\"Februāris\",\"Marts\",\"Aprīlis\",\"Maijs\",\"Jūnijs\",\"Jūlij"
},
{
"path": "lib/compressed/translations/nb_NO.js",
"chars": 559,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\""
},
{
"path": "lib/compressed/translations/ne_NP.js",
"chars": 613,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"जनवरी\",\"फेब्रुअरी\",\"मार्च\",\"अप्रिल\",\"मे\",\"जुन\",\"जुलाई\",\"अगस्त\","
},
{
"path": "lib/compressed/translations/nl_NL.js",
"chars": 567,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"august"
},
{
"path": "lib/compressed/translations/no_NO.js",
"chars": 482,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\""
},
{
"path": "lib/compressed/translations/pl_PL.js",
"chars": 580,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\""
},
{
"path": "lib/compressed/translations/pt_BR.js",
"chars": 589,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"ag"
},
{
"path": "lib/compressed/translations/pt_PT.js",
"chars": 553,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Janeiro\",\"Fevereiro\",\"Março\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Ag"
},
{
"path": "lib/compressed/translations/ro_RO.js",
"chars": 537,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"ianuarie\",\"februarie\",\"martie\",\"aprilie\",\"mai\",\"iunie\",\"iulie\","
},
{
"path": "lib/compressed/translations/ru_RU.js",
"chars": 564,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"января\",\"февраля\",\"марта\",\"апреля\",\"мая\",\"июня\",\"июля\",\"августа"
},
{
"path": "lib/compressed/translations/sk_SK.js",
"chars": 549,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"január\",\"február\",\"marec\",\"apríl\",\"máj\",\"jún\",\"júl\",\"august\",\"s"
},
{
"path": "lib/compressed/translations/sl_SI.js",
"chars": 559,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"marec\",\"april\",\"maj\",\"junij\",\"julij\",\"avgust"
},
{
"path": "lib/compressed/translations/sr_RS_cy.js",
"chars": 706,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"јануар\",\"фебруар\",\"март\",\"април\",\"мај\",\"јун\",\"јул\",\"август\",\"се"
},
{
"path": "lib/compressed/translations/sr_RS_lt.js",
"chars": 709,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"mart\",\"april\",\"maj\",\"jun\",\"juli\",\"avgust\",\"s"
},
{
"path": "lib/compressed/translations/sv_SE.js",
"chars": 669,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti"
},
{
"path": "lib/compressed/translations/th_TH.js",
"chars": 541,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กร"
},
{
"path": "lib/compressed/translations/tr_TR.js",
"chars": 547,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Ocak\",\"Şubat\",\"Mart\",\"Nisan\",\"Mayıs\",\"Haziran\",\"Temmuz\",\"Ağusto"
},
{
"path": "lib/compressed/translations/uk_UA.js",
"chars": 563,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"січень\",\"лютий\",\"березень\",\"квітень\",\"травень\",\"червень\",\"липен"
},
{
"path": "lib/compressed/translations/vi_VN.js",
"chars": 639,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Tháng Một\",\"Tháng Hai\",\"Tháng Ba\",\"Tháng Tư\",\"Tháng Năm\",\"Tháng"
},
{
"path": "lib/compressed/translations/zh_CN.js",
"chars": 439,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],m"
},
{
"path": "lib/compressed/translations/zh_TW.js",
"chars": 439,
"preview": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],m"
},
{
"path": "lib/legacy.js",
"chars": 4136,
"preview": "\n/*jshint\n asi: true,\n unused: true,\n boss: true,\n loopfunc: true,\n eqnull: true\n */\n\n\n/*!\n * Legacy browser s"
},
{
"path": "lib/picker.date.js",
"chars": 48236,
"preview": "/*!\n * Date picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/date.htm\n */\n\n(function ( factory ) {\n"
},
{
"path": "lib/picker.js",
"chars": 39286,
"preview": "/*!\n * pickadate.js v3.6.4, 2019/05/25\n * By Amsul, http://amsul.ca\n * Hosted on http://amsul.github.io/pickadate.js\n * "
},
{
"path": "lib/picker.time.js",
"chars": 31831,
"preview": "/*!\n * Time picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/time.htm\n */\n\n(function ( factory ) {\n"
},
{
"path": "lib/themes/classic.css",
"chars": 2379,
"preview": "/* ==========================================================================\n $BASE-PICKER\n ======================="
},
{
"path": "lib/themes/classic.date.css",
"chars": 5983,
"preview": "/* ==========================================================================\n $BASE-DATE-PICKER\n =================="
},
{
"path": "lib/themes/classic.time.css",
"chars": 2917,
"preview": "/* ==========================================================================\n $BASE-TIME-PICKER\n =================="
},
{
"path": "lib/themes/default.css",
"chars": 3587,
"preview": "/* ==========================================================================\n $BASE-PICKER\n ======================="
},
{
"path": "lib/themes/default.date.css",
"chars": 5983,
"preview": "/* ==========================================================================\n $BASE-DATE-PICKER\n =================="
},
{
"path": "lib/themes/default.time.css",
"chars": 2743,
"preview": "/* ==========================================================================\n $BASE-TIME-PICKER\n =================="
},
{
"path": "lib/themes/rtl.css",
"chars": 545,
"preview": "/*!\n * Styling for RTL (right-to-left) languages using pickadate.js\n */\n/**\n * Switch the direction - only really necess"
},
{
"path": "lib/themes-source/_variables.less",
"chars": 2837,
"preview": "\n// ==========================================================================\n// $VARIABLES\n// ========================"
},
{
"path": "lib/themes-source/base.date.less",
"chars": 6668,
"preview": "\n/* ==========================================================================\n $BASE-DATE-PICKER\n ================="
},
{
"path": "lib/themes-source/base.less",
"chars": 1073,
"preview": "\n/* ==========================================================================\n $BASE-PICKER\n ======================"
},
{
"path": "lib/themes-source/base.time.less",
"chars": 2451,
"preview": "\n/* ==========================================================================\n $BASE-TIME-PICKER\n ================="
},
{
"path": "lib/themes-source/classic.date.less",
"chars": 215,
"preview": "\n/* ==========================================================================\n $CLASSIC-DATE-PICKER\n =============="
},
{
"path": "lib/themes-source/classic.less",
"chars": 2307,
"preview": "/*!\n * Classic picker styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */\n\n@import \"_variables.les"
},
{
"path": "lib/themes-source/classic.time.less",
"chars": 1024,
"preview": "\n/* ==========================================================================\n $CLASSIC-TIME-PICKER\n =============="
},
{
"path": "lib/themes-source/default.date.less",
"chars": 215,
"preview": "\n/* ==========================================================================\n $DEFAULT-DATE-PICKER\n =============="
},
{
"path": "lib/themes-source/default.less",
"chars": 4404,
"preview": "/*!\n * Default mobile-first, responsive styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */\n\n@impo"
},
{
"path": "lib/themes-source/default.time.less",
"chars": 817,
"preview": "\n/* ==========================================================================\n $DEFAULT-TIME-PICKER\n =============="
},
{
"path": "lib/themes-source/rtl.less",
"chars": 600,
"preview": "/*!\n * Styling for RTL (right-to-left) languages using pickadate.js\n */\n\n@import \"_variables.less\";\n\n\n/**\n * Switch the "
},
{
"path": "lib/translations/FORMATTING.md",
"chars": 440,
"preview": "### The following convention is used for choosing a format for the translation files:\n\n1. Google for “Microsoft Style Gu"
},
{
"path": "lib/translations/NAMING.md",
"chars": 490,
"preview": "### The following convention is used for naming the translation files:\n\n```\nLANGUAGE_COUNTRY.js\n```\n\n#### Where:\n\n```\nLA"
},
{
"path": "lib/translations/ar.js",
"chars": 682,
"preview": "// Arabic\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'يناير', 'فبراير', 'مارس', 'ابريل', 'مايو', "
},
{
"path": "lib/translations/bg_BG.js",
"chars": 643,
"preview": "// Bulgarian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'януари','февруари','март','април','май',"
},
{
"path": "lib/translations/bs_BA.js",
"chars": 670,
"preview": "// Bosnian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'januar', 'februar', 'mart', 'april', 'maj'"
},
{
"path": "lib/translations/ca_ES.js",
"chars": 703,
"preview": "// Catalan\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Gener', 'Febrer', 'Març', 'Abril', 'Maig',"
},
{
"path": "lib/translations/cs_CZ.js",
"chars": 672,
"preview": "// Czech\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'leden', 'únor', 'březen', 'duben', 'květen',"
},
{
"path": "lib/translations/da_DK.js",
"chars": 676,
"preview": "// Danish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'januar', 'februar', 'marts', 'april', 'maj'"
},
{
"path": "lib/translations/de_DE.js",
"chars": 715,
"preview": "// German\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Januar', 'Februar', 'März', 'April', 'Mai',"
},
{
"path": "lib/translations/el_GR.js",
"chars": 702,
"preview": "// Greek\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρί"
},
{
"path": "lib/translations/es_ES.js",
"chars": 701,
"preview": "// Spanish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo"
},
{
"path": "lib/translations/et_EE.js",
"chars": 698,
"preview": "// Estonian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'jaanuar', 'veebruar', 'märts', 'aprill', "
},
{
"path": "lib/translations/eu_ES.js",
"chars": 703,
"preview": "// Basque\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'urtarrila', 'otsaila', 'martxoa', 'apirila'"
},
{
"path": "lib/translations/fa_IR.js",
"chars": 754,
"preview": "// Farsi\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژو"
},
{
"path": "lib/translations/fi_FI.js",
"chars": 715,
"preview": "// Finnish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'tammikuu', 'helmikuu', 'maaliskuu', 'huhti"
},
{
"path": "lib/translations/fr_FR.js",
"chars": 878,
"preview": "// French\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Janvier', 'Février', 'Mars', 'Avril', 'Mai'"
},
{
"path": "lib/translations/ge_GEO.js",
"chars": 698,
"preview": "// Georgian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'იანვარი', 'თებერვალი', 'მარტი', 'აპრილი',"
},
{
"path": "lib/translations/gl_ES.js",
"chars": 676,
"preview": "// Galician\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Xaneiro', 'Febreiro', 'Marzo', 'Abril', '"
},
{
"path": "lib/translations/he_IL.js",
"chars": 634,
"preview": "// Hebrew\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'י"
},
{
"path": "lib/translations/hi_IN.js",
"chars": 914,
"preview": "jQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुला"
},
{
"path": "lib/translations/hr_HR.js",
"chars": 707,
"preview": "// Croatian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'siječanj', 'veljača', 'ožujak', 'travanj'"
},
{
"path": "lib/translations/hu_HU.js",
"chars": 696,
"preview": "// Hungarian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'január', 'február', 'március', 'április'"
},
{
"path": "lib/translations/id_ID.js",
"chars": 669,
"preview": "// Indonesian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Januari', 'Februari', 'Maret', 'April',"
},
{
"path": "lib/translations/is_IS.js",
"chars": 696,
"preview": "// Icelandic\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'janúar', 'febrúar', 'mars', 'apríl', 'ma"
},
{
"path": "lib/translations/it_IT.js",
"chars": 916,
"preview": "// Italian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'gennaio', 'febbraio', 'marzo', 'aprile', '"
},
{
"path": "lib/translations/ja_JP.js",
"chars": 579,
"preview": "// Japanese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ '1月', '2月', '3月', '4月', '5月', '6月', '7月', "
},
{
"path": "lib/translations/km_KH.js",
"chars": 866,
"preview": "// Khmer\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'មករា', 'កុម្ភៈ', 'មីនា', 'មេសា', 'ឧសភា', 'មិ"
},
{
"path": "lib/translations/ko_KR.js",
"chars": 564,
"preview": "// Korean\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8"
},
{
"path": "lib/translations/lt_LT.js",
"chars": 1001,
"preview": "// Lietuviškai\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n labelMonthNext: 'Sekantis mėnuo',\n labelMonthPrev:"
},
{
"path": "lib/translations/lv_LV.js",
"chars": 883,
"preview": "// Latvian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Janvāris', 'Februāris', 'Marts', 'Aprīlis'"
},
{
"path": "lib/translations/nb_NO.js",
"chars": 688,
"preview": "// Norwegian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'januar', 'februar', 'mars', 'april', 'ma"
},
{
"path": "lib/translations/ne_NP.js",
"chars": 746,
"preview": "// Nepali\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'जनवरी', 'फेब्रुअरी', 'मार्च', 'अप्रिल', 'मे"
},
{
"path": "lib/translations/nl_NL.js",
"chars": 694,
"preview": "// Dutch\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'januari', 'februari', 'maart', 'april', 'mei"
},
{
"path": "lib/translations/pl_PL.js",
"chars": 708,
"preview": "// Polish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'styczeń', 'luty', 'marzec', 'kwiecień', 'ma"
},
{
"path": "lib/translations/pt_BR.js",
"chars": 725,
"preview": "// Brazilian Portuguese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'janeiro', 'fevereiro', 'março"
},
{
"path": "lib/translations/pt_PT.js",
"chars": 679,
"preview": "// Portuguese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Janeiro', 'Fevereiro', 'Março', 'Abril'"
},
{
"path": "lib/translations/ro_RO.js",
"chars": 661,
"preview": "// Romanian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'ianuarie', 'februarie', 'martie', 'aprili"
},
{
"path": "lib/translations/ru_RU.js",
"chars": 693,
"preview": "// Russian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'января', 'февраля', 'марта', 'апреля', 'ма"
},
{
"path": "lib/translations/sk_SK.js",
"chars": 677,
"preview": "// Slovak\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'január', 'február', 'marec', 'apríl', 'máj'"
},
{
"path": "lib/translations/sl_SI.js",
"chars": 690,
"preview": "// Slovenian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'januar', 'februar', 'marec', 'april', 'm"
},
{
"path": "lib/translations/sr_RS_cy.js",
"chars": 838,
"preview": "// Serbian (Cyrillic)\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'јануар','фебруар','март','април"
},
{
"path": "lib/translations/sr_RS_lt.js",
"chars": 860,
"preview": "// Serbian (Latin)\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'januar', 'februar', 'mart', 'april"
},
{
"path": "lib/translations/sv_SE.js",
"chars": 822,
"preview": "// Swedish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'januari', 'februari', 'mars', 'april', 'ma"
},
{
"path": "lib/translations/th_TH.js",
"chars": 655,
"preview": "// Thai\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พ"
},
{
"path": "lib/translations/tr_TR.js",
"chars": 676,
"preview": "// Turkish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', "
},
{
"path": "lib/translations/uk_UA.js",
"chars": 688,
"preview": "// Ukrainian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'січень', 'лютий', 'березень', 'квітень',"
},
{
"path": "lib/translations/vi_VN.js",
"chars": 771,
"preview": "// Vietnamese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ 'Tháng Một', 'Tháng Hai', 'Tháng Ba', 'T"
},
{
"path": "lib/translations/zh_CN.js",
"chars": 579,
"preview": "// Simplified Chinese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六"
},
{
"path": "lib/translations/zh_TW.js",
"chars": 580,
"preview": "// Traditional Chinese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n monthsFull: [ '一月', '二月', '三月', '四月', '五月', '"
},
{
"path": "package.json",
"chars": 1465,
"preview": "{\n \"name\": \"pickadate\",\n \"version\": \"3.6.4\",\n \"title\": \"pickadate.js\",\n \"description\": \"The mobile-friendly, respons"
},
{
"path": "tests/dev/date.htm",
"chars": 2892,
"preview": "<!doctype html>\n<html>\n<meta charset=\"utf-8\">\n\n<meta name=\"author\" content=\"Amsul - http://amsul.ca\">\n<meta name=\"viewpo"
},
{
"path": "tests/dev/time.htm",
"chars": 1762,
"preview": "<!doctype html>\n<html>\n<meta charset=\"utf-8\">\n\n<meta name=\"author\" content=\"Amsul - http://amsul.ca\">\n<meta name=\"viewpo"
},
{
"path": "tests/units/all.htm",
"chars": 645,
"preview": "<!doctype html>\n\n<meta charset=\"utf-8\">\n<title>pickadate.js • QUnit testing</title>\n<link rel=\"stylesheet\" href=\"."
},
{
"path": "tests/units/base.js",
"chars": 15200,
"preview": "\n/*jshint\n debug: true,\n devel: true,\n browser: true,\n asi: true,\n unused: true,\n eqnull: true,\n eq"
},
{
"path": "tests/units/date.js",
"chars": 59443,
"preview": "\n/*jshint\n debug: true,\n devel: true,\n browser: true,\n asi: true,\n unused: true,\n eqnull: true,\n eq"
},
{
"path": "tests/units/time.js",
"chars": 45322,
"preview": "\n/*jshint\n debug: true,\n devel: true,\n browser: true,\n asi: true,\n unused: true,\n eqnull: true,\n eq"
},
{
"path": "version-bump.js",
"chars": 1891,
"preview": "/*jshint node: true*/\n\nvar program = require('commander')\nvar semver = require('semver')\nvar grunt = require('grunt')\nva"
},
{
"path": "version-commit.js",
"chars": 437,
"preview": "/*jshint node: true*/\n\nvar grunt = require('grunt')\nvar exec = require('shelljs').exec\n\nvar pkg = require('./package')\n\n"
}
]
About this extraction
This page contains the full source code of the amsul/pickadate.js GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 148 files (430.6 KB), approximately 125.9k tokens, and a symbol index with 29 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.