date_picker 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/date_picker/form_tag_helper.rb +6 -1
- data/lib/date_picker/styles/bootstrap.rb +2 -2
- data/lib/date_picker/version.rb +1 -1
- data/test/dummy/app/models/event.rb +7 -0
- data/test/dummy/bower.json +0 -1
- data/test/dummy/config/application.rb +2 -1
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/log/development.log +560 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/-OQAivyOU9P9ZAQ_y2trK_-N68_KZTTs-DggI7rEtV0.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/2ANZSFEU9Y8883vrveeHrMkljTbZDFZjWodiOw-4_Mc.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/2ue6fqDvMQFxbulk_l8s1sfDI8JjKBcOeZPftypE6Pc.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/38E_4_y76yBlQpE8HJjOah6zDJCC-wqH4mcQaK0UL9c.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/555Va3PB92_a2AQmwxFqDpppNN98rCJfaTXNrtIvQlY.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/58Va14-8g080EO7U8YxBrWxWH0Qr8gn3BLdPS-zKsuk.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/66sWxMCCzRVWUujKumZwet2XyEhSst8zigZDeKxtz7k.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/6c8RqN_iKGxrlpU9kmE4piMTyi6YveDs403lDEvCZEI.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/7uHMi2DhIqL4sozu3L9KdTIh4qRh4kDwTw8wIo2k9us.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/A9UKKgpcQS_bV-aMc8rD1Qu8hPTSpihdwdy-ejQb0mA.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Aclgag9GTw3jn13itmrL8vGzg189879Cdb1CxBM8YXg.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/AzapYGohYHvX-jGdH6tgXcVgeKqRJ9dJ9pvMvuYpNMo.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/B5lIcQ9vf5wgTus70iuvWxkAE_xESV27FLK_iDtI0EY.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/BqHQMAB-ELafPl_sMF5n9fy9J9ZNOMc5DOqf8_tL-OQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/F4upoYy8YAs33dZYFwekywdF6bmiPbQZPwIk2ArDTXE.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/JMJFOO2mH2xI-0hAy-EeYA23aHL1S4-icXLuzYrodzc.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/JetsuzQv5yb-T0l2WvKI3GvbQ_nDU0ECMYnfRliFnno.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/K0-51T1-fiBjKvLPRPmIVnr2IcC6uTZ2qlg4zXUzm20.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/KlxUfYmC26KA405DB037sh4a34cPerHlhTqiPUphgQ0.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/LHGKiqiXX4pIWAWw0cCT3qjAfEvhqHZXmCX_7Nz1OCM.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/LmUmswBXcM1QeLiJ2p2G9gNRj39Cl_rJ7ozkvtiab4I.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/MXIq1eBOfj1ueMAr8iJUuiPw5HBe9WFMxE0Oi_bQ8Yg.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/N5AQcrKLar_U5rSRr0DAtN8_a9YMaZJT-hU6qw-lTAw.cache +9 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/NSXZAot11kWgUqAWk28pHk3Wk0HJu27z4eYUbkZuqa0.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/NXcLQLxrGRQoxi2WB4es6tt4iPz2E06Dj7gEXSj5zkQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/OELa8fL_6NiJFnO0qYfrT-FIojPLG8gS3TZtocTkHZc.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/OWyC9BF-hDFFyj0SikiKkaX_39O4TvVsT3QxmdjtK-0.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/QTXtB-rs9ebieZrqsw98wERUd5h9W7HvjMq8PGAGoxA.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/QdZ0Ei6ZlU9XbmrTWqH1ooq60iXZh7XQ4vaTe01xz5I.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/SUmt0T4xyK4cJt4FK6hLg1DVCEfL1oBFbpR_Fn8LFb4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Sf579fo1XrM5H_gkUQC8Q5sJeXbGcz38F9wO78RwCjQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/WUgBJoBGEucS48X8sj4JFo_l7MQRgLr3ZHeY1EY8iOY.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/WyEseCj1JAct7Zy1iS4fTBqDwEHnAFYXoobmpq4NU4Y.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/XkWj0epqQjwcDQkUhpPEz9Ws-W5NjhmrcvutlMBmHS8.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/YAOvP7ZFCuCxaRQHkCrW5logCs-229Fyj9xDcW53aWA.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/YVP4hjoeo9cOxkA-So_iF85TP_hajWWmr4381I3bhvo.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/YwMkInig25fMRiXbu4BMLn9839e0KsnGMPjdn_UHowc.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ZSqknXg6zfmOsfnNU_VBlVZpVdYqxcWJ4iRtcH2bUXA.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/_-dZnwSCjdWeA_hXdtRWU5Pem1vxMOpDEVJKYTincTs.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/aOYS3w0KCfX6uoINv4VE1fD7iwwKxMjH12073qKxbGY.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/bRnLCEIiUFbWSQW7D5OOeIv_MdP73gGzfZV2rMs0rt4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/bss5BE7NeR_7AJVJ1J87vPj-gBXbcmSKSjZc9ruG3aY.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/bui4vYOiOA_Xv3iHJUOI6M2Asla4_CfTUwvH8EP0ALQ.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/cY96L-sEcUMqUsjeCOIRE5eZ-912i_ftgvvugaPCcZ4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/deAn4dZCHtEdTP1ffOcaA1jCNfkmkSizVKOD421MFbM.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/h0p5bxXYrn5lWZ_jaG5xzx5H_JWGcpOE-AqpcQ1yqaA.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/hcn-zg5FtPDGrWaj2CHNLt-Mt7Nb0AFKBWM3T7NCh3o.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/hodd-s_Rz80YNWqb_ziDSgKRK3ov2d3vqWlF-PLY6vk.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/jHdCk5kG0rOdll4zcjjPd0pPGU9PzUBE2MfLU83G8QU.cache +9 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/jafUaM18fOh5BfsBbH2zLPvXuHZqo89o72OD7MuqgwA.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/kSNzc3dJCBL5eUTJXtSzMHAmYf5YShtOyZ5wDGja9-w.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/kYtB6gWmJ9wG5dj9L6r3vfOldAtcIO5kgZ09DAWf2gg.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/nLlJmM1IJrQP1NYweF8MBUn3V5zj5QpCq4c7lnii_gU.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ppnKh8HHcBF-WYFo8P3ZMgrVUoT48OihA9pRcdnSUJ4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/q7jAL_JEbPHXEtzTVG46_HiU6LeX1cTqLs4zyVkOBhw.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/r0hTIia-ZeuKklUR5a9zlc0z_o6Z4__a4fG7WNLUd4U.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/r7WA4ETigY4fGAmUQ8PSPHqtCXooDqOidNtjsWTbP4E.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/t7d1xK96yF7Qk1_XrkFpkeQY3MieEHdNsohdRO2cZSI.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/tBOQQXF_7FhywD-fijv2QCflxLm4xcMy9EOBVHMoXlI.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/tLiIOUHwpYwWc8zthL_sI_78QZJvS5eDNTa4uRt6Gic.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ugfJlMXXQWf2uapF0DqywRxrQSvbmAkOD6pttYDbWBI.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/v4xqfjzrUzZW5a6FzNYiez0yDf75GgHq1jr-pBhqedo.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/vP9vcm3n4AlQADvK2eFkPmgM4BIrrGugd1FjDp09HOI.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/vu4iDwUcLG80tLkdb6wYP9qryIQR-3AQJGEcDugALV8.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/w4SAbXtkx1wTaR9hFnRex0F5fpypGeDnsp8cGP7ByCM.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/wkgELuOuckRcA4pZ90TJBfB85KQpciJrtO6aDSUY2rU.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/xlacmyhLXW_PnX4fE3jc2qkszqeYtkHNN1o22-s_xLs.cache +1 -0
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/CONTRIBUTING.md +5 -0
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/README.md +11 -6
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/bower.json +3 -6
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.css +7 -1
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css +7 -1
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js +4 -2
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/component.json +3 -3
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/composer.json +2 -5
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/package.json +9 -1
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/bootstrap-datetimepicker.js +440 -64
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/less/_bootstrap-datetimepicker.less +9 -1
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/less/bootstrap-datetimepicker-build.less +3 -3
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/nuget/Bootstrap.v3.Datetimepicker.CSS.nuspec +2 -2
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/nuget/Bootstrap.v3.Datetimepicker.nuspec +1 -1
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/sass/_bootstrap-datetimepicker.scss +343 -0
- data/test/dummy/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/sass/bootstrap-datetimepicker-build.scss +16 -0
- metadata +140 -16
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! version : 4.
|
|
1
|
+
/*! version : 4.13.28
|
|
2
2
|
=========================================================
|
|
3
3
|
bootstrap-datetimejs
|
|
4
4
|
https://github.com/Eonasdan/bootstrap-datetimepicker
|
|
@@ -84,9 +84,14 @@
|
|
|
84
84
|
clsName: 'years',
|
|
85
85
|
navFnc: 'y',
|
|
86
86
|
navStep: 10
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
clsName: 'decades',
|
|
90
|
+
navFnc: 'y',
|
|
91
|
+
navStep: 100
|
|
87
92
|
}
|
|
88
93
|
],
|
|
89
|
-
viewModes = ['days', 'months', 'years'],
|
|
94
|
+
viewModes = ['days', 'months', 'years', 'decades'],
|
|
90
95
|
verticalModes = ['top', 'bottom', 'auto'],
|
|
91
96
|
horizontalModes = ['left', 'right', 'auto'],
|
|
92
97
|
toolbarPlacements = ['default', 'top', 'bottom'],
|
|
@@ -149,7 +154,6 @@
|
|
|
149
154
|
return false;
|
|
150
155
|
}
|
|
151
156
|
},
|
|
152
|
-
|
|
153
157
|
hasTime = function () {
|
|
154
158
|
return (isEnabled('h') || isEnabled('m') || isEnabled('s'));
|
|
155
159
|
},
|
|
@@ -186,6 +190,11 @@
|
|
|
186
190
|
.append(contTemplate.clone())
|
|
187
191
|
),
|
|
188
192
|
$('<div>').addClass('datepicker-years')
|
|
193
|
+
.append($('<table>').addClass('table-condensed')
|
|
194
|
+
.append(headTemplate.clone())
|
|
195
|
+
.append(contTemplate.clone())
|
|
196
|
+
),
|
|
197
|
+
$('<div>').addClass('datepicker-decades')
|
|
189
198
|
.append($('<table>').addClass('table-condensed')
|
|
190
199
|
.append(headTemplate.clone())
|
|
191
200
|
.append(contTemplate.clone())
|
|
@@ -200,12 +209,12 @@
|
|
|
200
209
|
|
|
201
210
|
if (isEnabled('h')) {
|
|
202
211
|
topRow.append($('<td>')
|
|
203
|
-
.append($('<a>').attr({href: '#', tabindex: '-1'}).addClass('btn').attr('data-action', 'incrementHours')
|
|
212
|
+
.append($('<a>').attr({href: '#', tabindex: '-1', 'title':'Increment Hour'}).addClass('btn').attr('data-action', 'incrementHours')
|
|
204
213
|
.append($('<span>').addClass(options.icons.up))));
|
|
205
214
|
middleRow.append($('<td>')
|
|
206
|
-
.append($('<span>').addClass('timepicker-hour').attr('data-time-component', '
|
|
215
|
+
.append($('<span>').addClass('timepicker-hour').attr({'data-time-component':'hours', 'title':'Pick Hour'}).attr('data-action', 'showHours')));
|
|
207
216
|
bottomRow.append($('<td>')
|
|
208
|
-
.append($('<a>').attr({href: '#', tabindex: '-1'}).addClass('btn').attr('data-action', 'decrementHours')
|
|
217
|
+
.append($('<a>').attr({href: '#', tabindex: '-1', 'title':'Decrement Hour'}).addClass('btn').attr('data-action', 'decrementHours')
|
|
209
218
|
.append($('<span>').addClass(options.icons.down))));
|
|
210
219
|
}
|
|
211
220
|
if (isEnabled('m')) {
|
|
@@ -215,12 +224,12 @@
|
|
|
215
224
|
bottomRow.append($('<td>').addClass('separator'));
|
|
216
225
|
}
|
|
217
226
|
topRow.append($('<td>')
|
|
218
|
-
.append($('<a>').attr({href: '#', tabindex: '-1'}).addClass('btn').attr('data-action', 'incrementMinutes')
|
|
227
|
+
.append($('<a>').attr({href: '#', tabindex: '-1', 'title':'Increment Minute'}).addClass('btn').attr('data-action', 'incrementMinutes')
|
|
219
228
|
.append($('<span>').addClass(options.icons.up))));
|
|
220
229
|
middleRow.append($('<td>')
|
|
221
|
-
.append($('<span>').addClass('timepicker-minute').attr('data-time-component'
|
|
230
|
+
.append($('<span>').addClass('timepicker-minute').attr({'data-time-component': 'minutes', 'title':'Pick Minute'}).attr('data-action', 'showMinutes')));
|
|
222
231
|
bottomRow.append($('<td>')
|
|
223
|
-
.append($('<a>').attr({href: '#', tabindex: '-1'}).addClass('btn').attr('data-action', 'decrementMinutes')
|
|
232
|
+
.append($('<a>').attr({href: '#', tabindex: '-1', 'title':'Decrement Minute'}).addClass('btn').attr('data-action', 'decrementMinutes')
|
|
224
233
|
.append($('<span>').addClass(options.icons.down))));
|
|
225
234
|
}
|
|
226
235
|
if (isEnabled('s')) {
|
|
@@ -230,19 +239,19 @@
|
|
|
230
239
|
bottomRow.append($('<td>').addClass('separator'));
|
|
231
240
|
}
|
|
232
241
|
topRow.append($('<td>')
|
|
233
|
-
.append($('<a>').attr({href: '#', tabindex: '-1'}).addClass('btn').attr('data-action', 'incrementSeconds')
|
|
242
|
+
.append($('<a>').attr({href: '#', tabindex: '-1', 'title':'Increment Second'}).addClass('btn').attr('data-action', 'incrementSeconds')
|
|
234
243
|
.append($('<span>').addClass(options.icons.up))));
|
|
235
244
|
middleRow.append($('<td>')
|
|
236
|
-
.append($('<span>').addClass('timepicker-second').attr('data-time-component'
|
|
245
|
+
.append($('<span>').addClass('timepicker-second').attr({'data-time-component': 'seconds', 'title':'Pick Second'}).attr('data-action', 'showSeconds')));
|
|
237
246
|
bottomRow.append($('<td>')
|
|
238
|
-
.append($('<a>').attr({href: '#', tabindex: '-1'}).addClass('btn').attr('data-action', 'decrementSeconds')
|
|
247
|
+
.append($('<a>').attr({href: '#', tabindex: '-1', 'title':'Decrement Second'}).addClass('btn').attr('data-action', 'decrementSeconds')
|
|
239
248
|
.append($('<span>').addClass(options.icons.down))));
|
|
240
249
|
}
|
|
241
250
|
|
|
242
251
|
if (!use24Hours) {
|
|
243
252
|
topRow.append($('<td>').addClass('separator'));
|
|
244
253
|
middleRow.append($('<td>')
|
|
245
|
-
.append($('<button>').addClass('btn btn-primary').attr('data-action'
|
|
254
|
+
.append($('<button>').addClass('btn btn-primary').attr({'data-action': 'togglePeriod', tabindex: '-1', 'title':'Toggle Period'})));
|
|
246
255
|
bottomRow.append($('<td>').addClass('separator'));
|
|
247
256
|
}
|
|
248
257
|
|
|
@@ -276,16 +285,16 @@
|
|
|
276
285
|
getToolbar = function () {
|
|
277
286
|
var row = [];
|
|
278
287
|
if (options.showTodayButton) {
|
|
279
|
-
row.push($('<td>').append($('<a>').attr('data-action', 'today').append($('<span>').addClass(options.icons.today))));
|
|
288
|
+
row.push($('<td>').append($('<a>').attr({'data-action':'today', 'title':'Go to today'}).append($('<span>').addClass(options.icons.today))));
|
|
280
289
|
}
|
|
281
290
|
if (!options.sideBySide && hasDate() && hasTime()) {
|
|
282
|
-
row.push($('<td>').append($('<a>').attr('data-action', '
|
|
291
|
+
row.push($('<td>').append($('<a>').attr({'data-action':'togglePicker', 'title':'Select Time'}).append($('<span>').addClass(options.icons.time))));
|
|
283
292
|
}
|
|
284
293
|
if (options.showClear) {
|
|
285
|
-
row.push($('<td>').append($('<a>').attr('data-action', '
|
|
294
|
+
row.push($('<td>').append($('<a>').attr({'data-action':'clear', 'title':'Clear selection'}).append($('<span>').addClass(options.icons.clear))));
|
|
286
295
|
}
|
|
287
296
|
if (options.showClose) {
|
|
288
|
-
row.push($('<td>').append($('<a>').attr('data-action', '
|
|
297
|
+
row.push($('<td>').append($('<a>').attr({'data-action':'close', 'title':'Close the picker'}).append($('<span>').addClass(options.icons.close))));
|
|
289
298
|
}
|
|
290
299
|
return $('<table>').addClass('table-condensed').append($('<tbody>').append($('<tr>').append(row)));
|
|
291
300
|
},
|
|
@@ -304,6 +313,9 @@
|
|
|
304
313
|
if (use24Hours) {
|
|
305
314
|
template.addClass('usetwentyfour');
|
|
306
315
|
}
|
|
316
|
+
if (isEnabled('s') && !use24Hours) {
|
|
317
|
+
template.addClass('wider');
|
|
318
|
+
}
|
|
307
319
|
if (options.sideBySide && hasDate() && hasTime()) {
|
|
308
320
|
template.addClass('timepicker-sbs');
|
|
309
321
|
template.append(
|
|
@@ -366,7 +378,7 @@
|
|
|
366
378
|
if (options.widgetParent) {
|
|
367
379
|
parent = options.widgetParent.append(widget);
|
|
368
380
|
} else if (element.is('input')) {
|
|
369
|
-
parent = element.
|
|
381
|
+
parent = element.after(widget).parent();
|
|
370
382
|
} else if (options.inline) {
|
|
371
383
|
parent = element.append(widget);
|
|
372
384
|
return;
|
|
@@ -421,8 +433,8 @@
|
|
|
421
433
|
widget.css({
|
|
422
434
|
top: vertical === 'top' ? 'auto' : position.top + element.outerHeight(),
|
|
423
435
|
bottom: vertical === 'top' ? position.top + element.outerHeight() : 'auto',
|
|
424
|
-
left: horizontal === 'left' ? parent.
|
|
425
|
-
right: horizontal === 'left' ? 'auto' : parent.
|
|
436
|
+
left: horizontal === 'left' ? (parent === element ? 0 : position.left) : 'auto',
|
|
437
|
+
right: horizontal === 'left' ? 'auto' : parent.outerWidth() - element.outerWidth() - (parent === element ? 0 : position.left)
|
|
426
438
|
});
|
|
427
439
|
},
|
|
428
440
|
|
|
@@ -433,19 +445,30 @@
|
|
|
433
445
|
element.trigger(e);
|
|
434
446
|
},
|
|
435
447
|
|
|
448
|
+
viewUpdate = function (e) {
|
|
449
|
+
if (e === 'y') {
|
|
450
|
+
e = 'YYYY';
|
|
451
|
+
}
|
|
452
|
+
notifyEvent({
|
|
453
|
+
type: 'dp.update',
|
|
454
|
+
change: e,
|
|
455
|
+
viewDate: viewDate.clone()
|
|
456
|
+
});
|
|
457
|
+
},
|
|
458
|
+
|
|
436
459
|
showMode = function (dir) {
|
|
437
460
|
if (!widget) {
|
|
438
461
|
return;
|
|
439
462
|
}
|
|
440
463
|
if (dir) {
|
|
441
|
-
currentViewMode = Math.max(minViewModeNumber, Math.min(
|
|
464
|
+
currentViewMode = Math.max(minViewModeNumber, Math.min(3, currentViewMode + dir));
|
|
442
465
|
}
|
|
443
466
|
widget.find('.datepicker > div').hide().filter('.datepicker-' + datePickerModes[currentViewMode].clsName).show();
|
|
444
467
|
},
|
|
445
468
|
|
|
446
469
|
fillDow = function () {
|
|
447
470
|
var row = $('<tr>'),
|
|
448
|
-
currentDate = viewDate.clone().startOf('w');
|
|
471
|
+
currentDate = viewDate.clone().startOf('w').startOf('d');
|
|
449
472
|
|
|
450
473
|
if (options.calendarWeeks === true) {
|
|
451
474
|
row.append($('<th>').addClass('cw').text('#'));
|
|
@@ -466,14 +489,22 @@
|
|
|
466
489
|
return options.enabledDates[testDate.format('YYYY-MM-DD')] === true;
|
|
467
490
|
},
|
|
468
491
|
|
|
492
|
+
isInDisabledHours = function (testDate) {
|
|
493
|
+
return options.disabledHours[testDate.format('H')] === true;
|
|
494
|
+
},
|
|
495
|
+
|
|
496
|
+
isInEnabledHours = function (testDate) {
|
|
497
|
+
return options.enabledHours[testDate.format('H')] === true;
|
|
498
|
+
},
|
|
499
|
+
|
|
469
500
|
isValid = function (targetMoment, granularity) {
|
|
470
501
|
if (!targetMoment.isValid()) {
|
|
471
502
|
return false;
|
|
472
503
|
}
|
|
473
|
-
if (options.disabledDates &&
|
|
504
|
+
if (options.disabledDates && granularity !== 'M' && isInDisabledDates(targetMoment)) {
|
|
474
505
|
return false;
|
|
475
506
|
}
|
|
476
|
-
if (options.enabledDates &&
|
|
507
|
+
if (options.enabledDates && granularity !== 'M' && !isInEnabledDates(targetMoment)) {
|
|
477
508
|
return false;
|
|
478
509
|
}
|
|
479
510
|
if (options.minDate && targetMoment.isBefore(options.minDate, granularity)) {
|
|
@@ -482,15 +513,33 @@
|
|
|
482
513
|
if (options.maxDate && targetMoment.isAfter(options.maxDate, granularity)) {
|
|
483
514
|
return false;
|
|
484
515
|
}
|
|
485
|
-
if (granularity === 'd' && options.daysOfWeekDisabled.indexOf(targetMoment.day()) !== -1) {
|
|
516
|
+
if (options.daysOfWeekDisabled && granularity === 'd' && options.daysOfWeekDisabled.indexOf(targetMoment.day()) !== -1) {
|
|
486
517
|
return false;
|
|
487
518
|
}
|
|
519
|
+
if (options.disabledHours && (granularity === 'h' || granularity === 'm' || granularity === 's') && isInDisabledHours(targetMoment)) {
|
|
520
|
+
return false;
|
|
521
|
+
}
|
|
522
|
+
if (options.enabledHours && (granularity === 'h' || granularity === 'm' || granularity === 's') && !isInEnabledHours(targetMoment)) {
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
525
|
+
if (options.disabledTimeIntervals && (granularity === 'h' || granularity === 'm' || granularity === 's')) {
|
|
526
|
+
var found = false;
|
|
527
|
+
$.each(options.disabledTimeIntervals, function () {
|
|
528
|
+
if (targetMoment.isBetween(this[0], this[1])) {
|
|
529
|
+
found = true;
|
|
530
|
+
return false;
|
|
531
|
+
}
|
|
532
|
+
});
|
|
533
|
+
if (found) {
|
|
534
|
+
return false;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
488
537
|
return true;
|
|
489
538
|
},
|
|
490
539
|
|
|
491
540
|
fillMonths = function () {
|
|
492
541
|
var spans = [],
|
|
493
|
-
monthsShort = viewDate.clone().startOf('y').
|
|
542
|
+
monthsShort = viewDate.clone().startOf('y').startOf('d');
|
|
494
543
|
while (monthsShort.isSame(viewDate, 'y')) {
|
|
495
544
|
spans.push($('<span>').attr('data-action', 'selectMonth').addClass('month').text(monthsShort.format('MMM')));
|
|
496
545
|
monthsShort.add(1, 'M');
|
|
@@ -503,6 +552,10 @@
|
|
|
503
552
|
monthsViewHeader = monthsView.find('th'),
|
|
504
553
|
months = monthsView.find('tbody').find('span');
|
|
505
554
|
|
|
555
|
+
monthsViewHeader.eq(0).find('span').attr('title', 'Previous Year');
|
|
556
|
+
monthsViewHeader.eq(1).attr('title', 'Select Year');
|
|
557
|
+
monthsViewHeader.eq(2).find('span').attr('title', 'Next Year');
|
|
558
|
+
|
|
506
559
|
monthsView.find('.disabled').removeClass('disabled');
|
|
507
560
|
|
|
508
561
|
if (!isValid(viewDate.clone().subtract(1, 'y'), 'y')) {
|
|
@@ -516,7 +569,7 @@
|
|
|
516
569
|
}
|
|
517
570
|
|
|
518
571
|
months.removeClass('active');
|
|
519
|
-
if (date.isSame(viewDate, 'y')) {
|
|
572
|
+
if (date.isSame(viewDate, 'y') && !unset) {
|
|
520
573
|
months.eq(date.month()).addClass('active');
|
|
521
574
|
}
|
|
522
575
|
|
|
@@ -534,6 +587,10 @@
|
|
|
534
587
|
endYear = viewDate.clone().add(6, 'y'),
|
|
535
588
|
html = '';
|
|
536
589
|
|
|
590
|
+
yearsViewHeader.eq(0).find('span').attr('title', 'Previous Decade');
|
|
591
|
+
yearsViewHeader.eq(1).attr('title', 'Select Decade');
|
|
592
|
+
yearsViewHeader.eq(2).find('span').attr('title', 'Next Decade');
|
|
593
|
+
|
|
537
594
|
yearsView.find('.disabled').removeClass('disabled');
|
|
538
595
|
|
|
539
596
|
if (options.minDate && options.minDate.isAfter(startYear, 'y')) {
|
|
@@ -547,25 +604,62 @@
|
|
|
547
604
|
}
|
|
548
605
|
|
|
549
606
|
while (!startYear.isAfter(endYear, 'y')) {
|
|
550
|
-
html += '<span data-action="selectYear" class="year' + (startYear.isSame(date, 'y') ? ' active' : '') + (!isValid(startYear, 'y') ? ' disabled' : '') + '">' + startYear.year() + '</span>';
|
|
607
|
+
html += '<span data-action="selectYear" class="year' + (startYear.isSame(date, 'y') && !unset ? ' active' : '') + (!isValid(startYear, 'y') ? ' disabled' : '') + '">' + startYear.year() + '</span>';
|
|
551
608
|
startYear.add(1, 'y');
|
|
552
609
|
}
|
|
553
610
|
|
|
554
611
|
yearsView.find('td').html(html);
|
|
555
612
|
},
|
|
556
613
|
|
|
614
|
+
updateDecades = function () {
|
|
615
|
+
var decadesView = widget.find('.datepicker-decades'),
|
|
616
|
+
decadesViewHeader = decadesView.find('th'),
|
|
617
|
+
startDecade = viewDate.isBefore(moment({y: 1999})) ? moment({y: 1899}) : moment({y: 1999}),
|
|
618
|
+
endDecade = startDecade.clone().add(100, 'y'),
|
|
619
|
+
html = '';
|
|
620
|
+
|
|
621
|
+
decadesViewHeader.eq(0).find('span').attr('title', 'Previous Century');
|
|
622
|
+
decadesViewHeader.eq(2).find('span').attr('title', 'Next Century');
|
|
623
|
+
|
|
624
|
+
decadesView.find('.disabled').removeClass('disabled');
|
|
625
|
+
|
|
626
|
+
if (startDecade.isSame(moment({y: 1900})) || (options.minDate && options.minDate.isAfter(startDecade, 'y'))) {
|
|
627
|
+
decadesViewHeader.eq(0).addClass('disabled');
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
decadesViewHeader.eq(1).text(startDecade.year() + '-' + endDecade.year());
|
|
631
|
+
|
|
632
|
+
if (startDecade.isSame(moment({y: 2000})) || (options.maxDate && options.maxDate.isBefore(endDecade, 'y'))) {
|
|
633
|
+
decadesViewHeader.eq(2).addClass('disabled');
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
while (!startDecade.isAfter(endDecade, 'y')) {
|
|
637
|
+
html += '<span data-action="selectDecade" class="decade' + (startDecade.isSame(date, 'y') ? ' active' : '') +
|
|
638
|
+
(!isValid(startDecade, 'y') ? ' disabled' : '') + '" data-selection="' + (startDecade.year() + 6) + '">' + (startDecade.year() + 1) + ' - ' + (startDecade.year() + 12) + '</span>';
|
|
639
|
+
startDecade.add(12, 'y');
|
|
640
|
+
}
|
|
641
|
+
html += '<span></span><span></span><span></span>'; //push the dangling block over, at least this way it's even
|
|
642
|
+
|
|
643
|
+
decadesView.find('td').html(html);
|
|
644
|
+
},
|
|
645
|
+
|
|
557
646
|
fillDate = function () {
|
|
558
647
|
var daysView = widget.find('.datepicker-days'),
|
|
559
648
|
daysViewHeader = daysView.find('th'),
|
|
560
649
|
currentDate,
|
|
561
650
|
html = [],
|
|
562
651
|
row,
|
|
563
|
-
clsName
|
|
652
|
+
clsName,
|
|
653
|
+
i;
|
|
564
654
|
|
|
565
655
|
if (!hasDate()) {
|
|
566
656
|
return;
|
|
567
657
|
}
|
|
568
658
|
|
|
659
|
+
daysViewHeader.eq(0).find('span').attr('title', 'Previous Month');
|
|
660
|
+
daysViewHeader.eq(1).attr('title', 'Select Month');
|
|
661
|
+
daysViewHeader.eq(2).find('span').attr('title', 'Next Month');
|
|
662
|
+
|
|
569
663
|
daysView.find('.disabled').removeClass('disabled');
|
|
570
664
|
daysViewHeader.eq(1).text(viewDate.format(options.dayViewHeaderFormat));
|
|
571
665
|
|
|
@@ -576,9 +670,9 @@
|
|
|
576
670
|
daysViewHeader.eq(2).addClass('disabled');
|
|
577
671
|
}
|
|
578
672
|
|
|
579
|
-
currentDate = viewDate.clone().startOf('M').startOf('
|
|
673
|
+
currentDate = viewDate.clone().startOf('M').startOf('w').startOf('d');
|
|
580
674
|
|
|
581
|
-
|
|
675
|
+
for (i = 0; i < 42; i++) { //always display 42 days (should show 6 weeks)
|
|
582
676
|
if (currentDate.weekday() === 0) {
|
|
583
677
|
row = $('<tr>');
|
|
584
678
|
if (options.calendarWeeks) {
|
|
@@ -605,7 +699,7 @@
|
|
|
605
699
|
if (currentDate.day() === 0 || currentDate.day() === 6) {
|
|
606
700
|
clsName += ' weekend';
|
|
607
701
|
}
|
|
608
|
-
row.append('<td data-action="selectDay" class="day' + clsName + '">' + currentDate.date() + '</td>');
|
|
702
|
+
row.append('<td data-action="selectDay" data-day="' + currentDate.format('L') + '" class="day' + clsName + '">' + currentDate.date() + '</td>');
|
|
609
703
|
currentDate.add(1, 'd');
|
|
610
704
|
}
|
|
611
705
|
|
|
@@ -614,6 +708,8 @@
|
|
|
614
708
|
updateMonths();
|
|
615
709
|
|
|
616
710
|
updateYears();
|
|
711
|
+
|
|
712
|
+
updateDecades();
|
|
617
713
|
},
|
|
618
714
|
|
|
619
715
|
fillHours = function () {
|
|
@@ -673,9 +769,20 @@
|
|
|
673
769
|
},
|
|
674
770
|
|
|
675
771
|
fillTime = function () {
|
|
676
|
-
var
|
|
772
|
+
var toggle, newDate, timeComponents;
|
|
773
|
+
timeComponents = widget.find('.timepicker span[data-time-component]');
|
|
774
|
+
|
|
677
775
|
if (!use24Hours) {
|
|
678
|
-
widget.find('.timepicker [data-action=togglePeriod]')
|
|
776
|
+
toggle = widget.find('.timepicker [data-action=togglePeriod]');
|
|
777
|
+
newDate = date.clone().add((date.hours() >= 12) ? -12 : 12, 'h');
|
|
778
|
+
|
|
779
|
+
toggle.text(date.format('A'));
|
|
780
|
+
|
|
781
|
+
if (isValid(newDate, 'h')) {
|
|
782
|
+
toggle.removeClass('disabled');
|
|
783
|
+
} else {
|
|
784
|
+
toggle.addClass('disabled');
|
|
785
|
+
}
|
|
679
786
|
}
|
|
680
787
|
timeComponents.filter('[data-time-component=hours]').text(date.format(use24Hours ? 'HH' : 'hh'));
|
|
681
788
|
timeComponents.filter('[data-time-component=minutes]').text(date.format('mm'));
|
|
@@ -722,8 +829,8 @@
|
|
|
722
829
|
viewDate = date.clone();
|
|
723
830
|
input.val(date.format(actualFormat));
|
|
724
831
|
element.data('date', date.format(actualFormat));
|
|
725
|
-
update();
|
|
726
832
|
unset = false;
|
|
833
|
+
update();
|
|
727
834
|
notifyEvent({
|
|
728
835
|
type: 'dp.change',
|
|
729
836
|
date: date.clone(),
|
|
@@ -741,6 +848,7 @@
|
|
|
741
848
|
},
|
|
742
849
|
|
|
743
850
|
hide = function () {
|
|
851
|
+
///<summary>Hides the widget. Possibly will emit dp.hide</summary>
|
|
744
852
|
var transitioning = false;
|
|
745
853
|
if (!widget) {
|
|
746
854
|
return picker;
|
|
@@ -787,13 +895,17 @@
|
|
|
787
895
|
********************************************************************************/
|
|
788
896
|
actions = {
|
|
789
897
|
next: function () {
|
|
790
|
-
|
|
898
|
+
var navFnc = datePickerModes[currentViewMode].navFnc;
|
|
899
|
+
viewDate.add(datePickerModes[currentViewMode].navStep, navFnc);
|
|
791
900
|
fillDate();
|
|
901
|
+
viewUpdate(navFnc);
|
|
792
902
|
},
|
|
793
903
|
|
|
794
904
|
previous: function () {
|
|
795
|
-
|
|
905
|
+
var navFnc = datePickerModes[currentViewMode].navFnc;
|
|
906
|
+
viewDate.subtract(datePickerModes[currentViewMode].navStep, navFnc);
|
|
796
907
|
fillDate();
|
|
908
|
+
viewUpdate(navFnc);
|
|
797
909
|
},
|
|
798
910
|
|
|
799
911
|
pickerSwitch: function () {
|
|
@@ -812,6 +924,7 @@
|
|
|
812
924
|
showMode(-1);
|
|
813
925
|
fillDate();
|
|
814
926
|
}
|
|
927
|
+
viewUpdate('M');
|
|
815
928
|
},
|
|
816
929
|
|
|
817
930
|
selectYear: function (e) {
|
|
@@ -826,6 +939,22 @@
|
|
|
826
939
|
showMode(-1);
|
|
827
940
|
fillDate();
|
|
828
941
|
}
|
|
942
|
+
viewUpdate('YYYY');
|
|
943
|
+
},
|
|
944
|
+
|
|
945
|
+
selectDecade: function (e) {
|
|
946
|
+
var year = parseInt($(e.target).data('selection'), 10) || 0;
|
|
947
|
+
viewDate.year(year);
|
|
948
|
+
if (currentViewMode === minViewModeNumber) {
|
|
949
|
+
setValue(date.clone().year(viewDate.year()));
|
|
950
|
+
if (!options.inline) {
|
|
951
|
+
hide();
|
|
952
|
+
}
|
|
953
|
+
} else {
|
|
954
|
+
showMode(-1);
|
|
955
|
+
fillDate();
|
|
956
|
+
}
|
|
957
|
+
viewUpdate('YYYY');
|
|
829
958
|
},
|
|
830
959
|
|
|
831
960
|
selectDay: function (e) {
|
|
@@ -843,27 +972,45 @@
|
|
|
843
972
|
},
|
|
844
973
|
|
|
845
974
|
incrementHours: function () {
|
|
846
|
-
|
|
975
|
+
var newDate = date.clone().add(1, 'h');
|
|
976
|
+
if (isValid(newDate, 'h')) {
|
|
977
|
+
setValue(newDate);
|
|
978
|
+
}
|
|
847
979
|
},
|
|
848
980
|
|
|
849
981
|
incrementMinutes: function () {
|
|
850
|
-
|
|
982
|
+
var newDate = date.clone().add(options.stepping, 'm');
|
|
983
|
+
if (isValid(newDate, 'm')) {
|
|
984
|
+
setValue(newDate);
|
|
985
|
+
}
|
|
851
986
|
},
|
|
852
987
|
|
|
853
988
|
incrementSeconds: function () {
|
|
854
|
-
|
|
989
|
+
var newDate = date.clone().add(1, 's');
|
|
990
|
+
if (isValid(newDate, 's')) {
|
|
991
|
+
setValue(newDate);
|
|
992
|
+
}
|
|
855
993
|
},
|
|
856
994
|
|
|
857
995
|
decrementHours: function () {
|
|
858
|
-
|
|
996
|
+
var newDate = date.clone().subtract(1, 'h');
|
|
997
|
+
if (isValid(newDate, 'h')) {
|
|
998
|
+
setValue(newDate);
|
|
999
|
+
}
|
|
859
1000
|
},
|
|
860
1001
|
|
|
861
1002
|
decrementMinutes: function () {
|
|
862
|
-
|
|
1003
|
+
var newDate = date.clone().subtract(options.stepping, 'm');
|
|
1004
|
+
if (isValid(newDate, 'm')) {
|
|
1005
|
+
setValue(newDate);
|
|
1006
|
+
}
|
|
863
1007
|
},
|
|
864
1008
|
|
|
865
1009
|
decrementSeconds: function () {
|
|
866
|
-
|
|
1010
|
+
var newDate = date.clone().subtract(1, 's');
|
|
1011
|
+
if (isValid(newDate, 's')) {
|
|
1012
|
+
setValue(newDate);
|
|
1013
|
+
}
|
|
867
1014
|
},
|
|
868
1015
|
|
|
869
1016
|
togglePeriod: function () {
|
|
@@ -953,7 +1100,9 @@
|
|
|
953
1100
|
clear: clear,
|
|
954
1101
|
|
|
955
1102
|
today: function () {
|
|
956
|
-
|
|
1103
|
+
if (isValid(moment(), 'd')) {
|
|
1104
|
+
setValue(moment());
|
|
1105
|
+
}
|
|
957
1106
|
},
|
|
958
1107
|
|
|
959
1108
|
close: hide
|
|
@@ -968,6 +1117,7 @@
|
|
|
968
1117
|
},
|
|
969
1118
|
|
|
970
1119
|
show = function () {
|
|
1120
|
+
///<summary>Shows the widget. Possibly will emit dp.show and dp.change</summary>
|
|
971
1121
|
var currentMoment,
|
|
972
1122
|
useCurrentGranularity = {
|
|
973
1123
|
'year': function (m) {
|
|
@@ -990,7 +1140,9 @@
|
|
|
990
1140
|
if (input.prop('disabled') || (!options.ignoreReadonly && input.prop('readonly')) || widget) {
|
|
991
1141
|
return picker;
|
|
992
1142
|
}
|
|
993
|
-
if (
|
|
1143
|
+
if (input.val().trim().length !== 0) {
|
|
1144
|
+
setValue(parseInputDate(input.val().trim()));
|
|
1145
|
+
} else if (options.useCurrent && unset && ((input.is('input') && input.val().trim().length === 0) || options.inline)) {
|
|
994
1146
|
currentMoment = moment();
|
|
995
1147
|
if (typeof options.useCurrent === 'string') {
|
|
996
1148
|
currentMoment = useCurrentGranularity[options.useCurrent](currentMoment);
|
|
@@ -1020,7 +1172,7 @@
|
|
|
1020
1172
|
widget.show();
|
|
1021
1173
|
place();
|
|
1022
1174
|
|
|
1023
|
-
if (!input.is(':focus')) {
|
|
1175
|
+
if (options.focusOnShow && !input.is(':focus')) {
|
|
1024
1176
|
input.focus();
|
|
1025
1177
|
}
|
|
1026
1178
|
|
|
@@ -1031,6 +1183,7 @@
|
|
|
1031
1183
|
},
|
|
1032
1184
|
|
|
1033
1185
|
toggle = function () {
|
|
1186
|
+
/// <summary>Shows or hides the widget</summary>
|
|
1034
1187
|
return (widget ? hide() : show());
|
|
1035
1188
|
},
|
|
1036
1189
|
|
|
@@ -1045,16 +1198,6 @@
|
|
|
1045
1198
|
},
|
|
1046
1199
|
|
|
1047
1200
|
keydown = function (e) {
|
|
1048
|
-
//if (e.keyCode === 27 && widget) { // allow escape to hide picker
|
|
1049
|
-
// hide();
|
|
1050
|
-
// return false;
|
|
1051
|
-
//}
|
|
1052
|
-
//if (e.keyCode === 40 && !widget) { // allow down to show picker
|
|
1053
|
-
// show();
|
|
1054
|
-
// e.preventDefault();
|
|
1055
|
-
//}
|
|
1056
|
-
//return true;
|
|
1057
|
-
|
|
1058
1201
|
var handler = null,
|
|
1059
1202
|
index,
|
|
1060
1203
|
index2,
|
|
@@ -1121,7 +1264,8 @@
|
|
|
1121
1264
|
'change': change,
|
|
1122
1265
|
'blur': options.debug ? '' : hide,
|
|
1123
1266
|
'keydown': keydown,
|
|
1124
|
-
'keyup': keyup
|
|
1267
|
+
'keyup': keyup,
|
|
1268
|
+
'focus': options.allowInputToggle ? show : ''
|
|
1125
1269
|
});
|
|
1126
1270
|
|
|
1127
1271
|
if (element.is('input')) {
|
|
@@ -1139,7 +1283,8 @@
|
|
|
1139
1283
|
'change': change,
|
|
1140
1284
|
'blur': hide,
|
|
1141
1285
|
'keydown': keydown,
|
|
1142
|
-
'keyup': keyup
|
|
1286
|
+
'keyup': keyup,
|
|
1287
|
+
'focus': options.allowInputToggle ? hide : ''
|
|
1143
1288
|
});
|
|
1144
1289
|
|
|
1145
1290
|
if (element.is('input')) {
|
|
@@ -1166,6 +1311,17 @@
|
|
|
1166
1311
|
return (Object.keys(givenDatesIndexed).length) ? givenDatesIndexed : false;
|
|
1167
1312
|
},
|
|
1168
1313
|
|
|
1314
|
+
indexGivenHours = function (givenHoursArray) {
|
|
1315
|
+
// Store given enabledHours and disabledHours as keys.
|
|
1316
|
+
// This way we can check their existence in O(1) time instead of looping through whole array.
|
|
1317
|
+
// (for example: options.enabledHours['2014-02-27'] === true)
|
|
1318
|
+
var givenHoursIndexed = {};
|
|
1319
|
+
$.each(givenHoursArray, function () {
|
|
1320
|
+
givenHoursIndexed[this] = true;
|
|
1321
|
+
});
|
|
1322
|
+
return (Object.keys(givenHoursIndexed).length) ? givenHoursIndexed : false;
|
|
1323
|
+
},
|
|
1324
|
+
|
|
1169
1325
|
initFormatting = function () {
|
|
1170
1326
|
var format = options.format || 'L LT';
|
|
1171
1327
|
|
|
@@ -1182,7 +1338,7 @@
|
|
|
1182
1338
|
parseFormats.push(actualFormat);
|
|
1183
1339
|
}
|
|
1184
1340
|
|
|
1185
|
-
use24Hours = (actualFormat.toLowerCase().indexOf('a') < 1 && actualFormat.indexOf('h') < 1);
|
|
1341
|
+
use24Hours = (actualFormat.toLowerCase().indexOf('a') < 1 && actualFormat.replace(/\[.*?\]/g, '').indexOf('h') < 1);
|
|
1186
1342
|
|
|
1187
1343
|
if (isEnabled('y')) {
|
|
1188
1344
|
minViewModeNumber = 2;
|
|
@@ -1212,6 +1368,7 @@
|
|
|
1212
1368
|
*
|
|
1213
1369
|
********************************************************************************/
|
|
1214
1370
|
picker.destroy = function () {
|
|
1371
|
+
///<summary>Destroys the widget and removes all attached event listeners</summary>
|
|
1215
1372
|
hide();
|
|
1216
1373
|
detachDatePickerElementEvents();
|
|
1217
1374
|
element.removeData('DateTimePicker');
|
|
@@ -1225,6 +1382,8 @@
|
|
|
1225
1382
|
picker.hide = hide;
|
|
1226
1383
|
|
|
1227
1384
|
picker.disable = function () {
|
|
1385
|
+
///<summary>Disables the input element, the component is attached to, by adding a disabled="true" attribute to it.
|
|
1386
|
+
///If the widget was visible before that call it is hidden. Possibly emits dp.hide</summary>
|
|
1228
1387
|
hide();
|
|
1229
1388
|
if (component && component.hasClass('btn')) {
|
|
1230
1389
|
component.addClass('disabled');
|
|
@@ -1234,6 +1393,7 @@
|
|
|
1234
1393
|
};
|
|
1235
1394
|
|
|
1236
1395
|
picker.enable = function () {
|
|
1396
|
+
///<summary>Enables the input element, the component is attached to, by removing disabled attribute from it.</summary>
|
|
1237
1397
|
if (component && component.hasClass('btn')) {
|
|
1238
1398
|
component.removeClass('disabled');
|
|
1239
1399
|
}
|
|
@@ -1272,6 +1432,14 @@
|
|
|
1272
1432
|
};
|
|
1273
1433
|
|
|
1274
1434
|
picker.date = function (newDate) {
|
|
1435
|
+
///<signature helpKeyword="$.fn.datetimepicker.date">
|
|
1436
|
+
///<summary>Returns the component's model current date, a moment object or null if not set.</summary>
|
|
1437
|
+
///<returns type="Moment">date.clone()</returns>
|
|
1438
|
+
///</signature>
|
|
1439
|
+
///<signature>
|
|
1440
|
+
///<summary>Sets the components model current moment to it. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.</summary>
|
|
1441
|
+
///<param name="newDate" locid="$.fn.datetimepicker.date_p:newDate">Takes string, Date, moment, null parameter.</param>
|
|
1442
|
+
///</signature>
|
|
1275
1443
|
if (arguments.length === 0) {
|
|
1276
1444
|
if (unset) {
|
|
1277
1445
|
return null;
|
|
@@ -1288,6 +1456,9 @@
|
|
|
1288
1456
|
};
|
|
1289
1457
|
|
|
1290
1458
|
picker.format = function (newFormat) {
|
|
1459
|
+
///<summary>test su</summary>
|
|
1460
|
+
///<param name="newFormat">info about para</param>
|
|
1461
|
+
///<returns type="string|boolean">returns foo</returns>
|
|
1291
1462
|
if (arguments.length === 0) {
|
|
1292
1463
|
return options.format;
|
|
1293
1464
|
}
|
|
@@ -1333,6 +1504,15 @@
|
|
|
1333
1504
|
};
|
|
1334
1505
|
|
|
1335
1506
|
picker.disabledDates = function (dates) {
|
|
1507
|
+
///<signature helpKeyword="$.fn.datetimepicker.disabledDates">
|
|
1508
|
+
///<summary>Returns an array with the currently set disabled dates on the component.</summary>
|
|
1509
|
+
///<returns type="array">options.disabledDates</returns>
|
|
1510
|
+
///</signature>
|
|
1511
|
+
///<signature>
|
|
1512
|
+
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
|
|
1513
|
+
///options.enabledDates if such exist.</summary>
|
|
1514
|
+
///<param name="dates" locid="$.fn.datetimepicker.disabledDates_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
|
|
1515
|
+
///</signature>
|
|
1336
1516
|
if (arguments.length === 0) {
|
|
1337
1517
|
return (options.disabledDates ? $.extend({}, options.disabledDates) : options.disabledDates);
|
|
1338
1518
|
}
|
|
@@ -1352,6 +1532,14 @@
|
|
|
1352
1532
|
};
|
|
1353
1533
|
|
|
1354
1534
|
picker.enabledDates = function (dates) {
|
|
1535
|
+
///<signature helpKeyword="$.fn.datetimepicker.enabledDates">
|
|
1536
|
+
///<summary>Returns an array with the currently set enabled dates on the component.</summary>
|
|
1537
|
+
///<returns type="array">options.enabledDates</returns>
|
|
1538
|
+
///</signature>
|
|
1539
|
+
///<signature>
|
|
1540
|
+
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledDates if such exist.</summary>
|
|
1541
|
+
///<param name="dates" locid="$.fn.datetimepicker.enabledDates_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
|
|
1542
|
+
///</signature>
|
|
1355
1543
|
if (arguments.length === 0) {
|
|
1356
1544
|
return (options.enabledDates ? $.extend({}, options.enabledDates) : options.enabledDates);
|
|
1357
1545
|
}
|
|
@@ -1375,6 +1563,12 @@
|
|
|
1375
1563
|
return options.daysOfWeekDisabled.splice(0);
|
|
1376
1564
|
}
|
|
1377
1565
|
|
|
1566
|
+
if ((typeof daysOfWeekDisabled === 'boolean') && !daysOfWeekDisabled) {
|
|
1567
|
+
options.daysOfWeekDisabled = false;
|
|
1568
|
+
update();
|
|
1569
|
+
return picker;
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1378
1572
|
if (!(daysOfWeekDisabled instanceof Array)) {
|
|
1379
1573
|
throw new TypeError('daysOfWeekDisabled() expects an array parameter');
|
|
1380
1574
|
}
|
|
@@ -1388,6 +1582,17 @@
|
|
|
1388
1582
|
}
|
|
1389
1583
|
return previousValue;
|
|
1390
1584
|
}, []).sort();
|
|
1585
|
+
if (options.useCurrent && !options.keepInvalid) {
|
|
1586
|
+
var tries = 0;
|
|
1587
|
+
while (!isValid(date, 'd')) {
|
|
1588
|
+
date.add(1, 'd');
|
|
1589
|
+
if (tries === 7) {
|
|
1590
|
+
throw 'Tried 7 times to find a valid date';
|
|
1591
|
+
}
|
|
1592
|
+
tries++;
|
|
1593
|
+
}
|
|
1594
|
+
setValue(date);
|
|
1595
|
+
}
|
|
1391
1596
|
update();
|
|
1392
1597
|
return picker;
|
|
1393
1598
|
};
|
|
@@ -1418,7 +1623,7 @@
|
|
|
1418
1623
|
throw new TypeError('maxDate() date parameter is before options.minDate: ' + parsedDate.format(actualFormat));
|
|
1419
1624
|
}
|
|
1420
1625
|
options.maxDate = parsedDate;
|
|
1421
|
-
if (options.
|
|
1626
|
+
if (options.useCurrent && !options.keepInvalid && date.isAfter(maxDate)) {
|
|
1422
1627
|
setValue(options.maxDate);
|
|
1423
1628
|
}
|
|
1424
1629
|
if (viewDate.isAfter(parsedDate)) {
|
|
@@ -1454,7 +1659,7 @@
|
|
|
1454
1659
|
throw new TypeError('minDate() date parameter is after options.maxDate: ' + parsedDate.format(actualFormat));
|
|
1455
1660
|
}
|
|
1456
1661
|
options.minDate = parsedDate;
|
|
1457
|
-
if (options.
|
|
1662
|
+
if (options.useCurrent && !options.keepInvalid && date.isBefore(minDate)) {
|
|
1458
1663
|
setValue(options.minDate);
|
|
1459
1664
|
}
|
|
1460
1665
|
if (viewDate.isBefore(parsedDate)) {
|
|
@@ -1465,6 +1670,14 @@
|
|
|
1465
1670
|
};
|
|
1466
1671
|
|
|
1467
1672
|
picker.defaultDate = function (defaultDate) {
|
|
1673
|
+
///<signature helpKeyword="$.fn.datetimepicker.defaultDate">
|
|
1674
|
+
///<summary>Returns a moment with the options.defaultDate option configuration or false if not set</summary>
|
|
1675
|
+
///<returns type="Moment">date.clone()</returns>
|
|
1676
|
+
///</signature>
|
|
1677
|
+
///<signature>
|
|
1678
|
+
///<summary>Will set the picker's inital date. If a boolean:false value is passed the options.defaultDate parameter is cleared.</summary>
|
|
1679
|
+
///<param name="defaultDate" locid="$.fn.datetimepicker.defaultDate_p:defaultDate">Takes a string, Date, moment, boolean:false</param>
|
|
1680
|
+
///</signature>
|
|
1468
1681
|
if (arguments.length === 0) {
|
|
1469
1682
|
return options.defaultDate ? options.defaultDate.clone() : options.defaultDate;
|
|
1470
1683
|
}
|
|
@@ -1489,7 +1702,7 @@
|
|
|
1489
1702
|
|
|
1490
1703
|
options.defaultDate = parsedDate;
|
|
1491
1704
|
|
|
1492
|
-
if (options.defaultDate && input.val().trim() === '' && input.attr('placeholder') === undefined) {
|
|
1705
|
+
if (options.defaultDate && options.inline || (input.val().trim() === '' && input.attr('placeholder') === undefined)) {
|
|
1493
1706
|
setValue(options.defaultDate);
|
|
1494
1707
|
}
|
|
1495
1708
|
return picker;
|
|
@@ -1764,6 +1977,19 @@
|
|
|
1764
1977
|
return picker;
|
|
1765
1978
|
};
|
|
1766
1979
|
|
|
1980
|
+
picker.focusOnShow = function (focusOnShow) {
|
|
1981
|
+
if (arguments.length === 0) {
|
|
1982
|
+
return options.focusOnShow;
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
if (typeof focusOnShow !== 'boolean') {
|
|
1986
|
+
throw new TypeError('focusOnShow() expects a boolean parameter');
|
|
1987
|
+
}
|
|
1988
|
+
|
|
1989
|
+
options.focusOnShow = focusOnShow;
|
|
1990
|
+
return picker;
|
|
1991
|
+
};
|
|
1992
|
+
|
|
1767
1993
|
picker.inline = function (inline) {
|
|
1768
1994
|
if (arguments.length === 0) {
|
|
1769
1995
|
return options.inline;
|
|
@@ -1796,6 +2022,19 @@
|
|
|
1796
2022
|
return picker;
|
|
1797
2023
|
};
|
|
1798
2024
|
|
|
2025
|
+
picker.allowInputToggle = function (allowInputToggle) {
|
|
2026
|
+
if (arguments.length === 0) {
|
|
2027
|
+
return options.allowInputToggle;
|
|
2028
|
+
}
|
|
2029
|
+
|
|
2030
|
+
if (typeof allowInputToggle !== 'boolean') {
|
|
2031
|
+
throw new TypeError('allowInputToggle() expects a boolean parameter');
|
|
2032
|
+
}
|
|
2033
|
+
|
|
2034
|
+
options.allowInputToggle = allowInputToggle;
|
|
2035
|
+
return picker;
|
|
2036
|
+
};
|
|
2037
|
+
|
|
1799
2038
|
picker.showClose = function (showClose) {
|
|
1800
2039
|
if (arguments.length === 0) {
|
|
1801
2040
|
return options.showClose;
|
|
@@ -1834,6 +2073,137 @@
|
|
|
1834
2073
|
return picker;
|
|
1835
2074
|
};
|
|
1836
2075
|
|
|
2076
|
+
picker.disabledTimeIntervals = function (disabledTimeIntervals) {
|
|
2077
|
+
///<signature helpKeyword="$.fn.datetimepicker.disabledTimeIntervals">
|
|
2078
|
+
///<summary>Returns an array with the currently set disabled dates on the component.</summary>
|
|
2079
|
+
///<returns type="array">options.disabledTimeIntervals</returns>
|
|
2080
|
+
///</signature>
|
|
2081
|
+
///<signature>
|
|
2082
|
+
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
|
|
2083
|
+
///options.enabledDates if such exist.</summary>
|
|
2084
|
+
///<param name="dates" locid="$.fn.datetimepicker.disabledTimeIntervals_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
|
|
2085
|
+
///</signature>
|
|
2086
|
+
if (arguments.length === 0) {
|
|
2087
|
+
return (options.disabledTimeIntervals ? $.extend({}, options.disabledTimeIntervals) : options.disabledTimeIntervals);
|
|
2088
|
+
}
|
|
2089
|
+
|
|
2090
|
+
if (!disabledTimeIntervals) {
|
|
2091
|
+
options.disabledTimeIntervals = false;
|
|
2092
|
+
update();
|
|
2093
|
+
return picker;
|
|
2094
|
+
}
|
|
2095
|
+
if (!(disabledTimeIntervals instanceof Array)) {
|
|
2096
|
+
throw new TypeError('disabledTimeIntervals() expects an array parameter');
|
|
2097
|
+
}
|
|
2098
|
+
options.disabledTimeIntervals = disabledTimeIntervals;
|
|
2099
|
+
update();
|
|
2100
|
+
return picker;
|
|
2101
|
+
};
|
|
2102
|
+
|
|
2103
|
+
picker.disabledHours = function (hours) {
|
|
2104
|
+
///<signature helpKeyword="$.fn.datetimepicker.disabledHours">
|
|
2105
|
+
///<summary>Returns an array with the currently set disabled hours on the component.</summary>
|
|
2106
|
+
///<returns type="array">options.disabledHours</returns>
|
|
2107
|
+
///</signature>
|
|
2108
|
+
///<signature>
|
|
2109
|
+
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
|
|
2110
|
+
///options.enabledHours if such exist.</summary>
|
|
2111
|
+
///<param name="hours" locid="$.fn.datetimepicker.disabledHours_p:hours">Takes an [ int ] of values and disallows the user to select only from those hours.</param>
|
|
2112
|
+
///</signature>
|
|
2113
|
+
if (arguments.length === 0) {
|
|
2114
|
+
return (options.disabledHours ? $.extend({}, options.disabledHours) : options.disabledHours);
|
|
2115
|
+
}
|
|
2116
|
+
|
|
2117
|
+
if (!hours) {
|
|
2118
|
+
options.disabledHours = false;
|
|
2119
|
+
update();
|
|
2120
|
+
return picker;
|
|
2121
|
+
}
|
|
2122
|
+
if (!(hours instanceof Array)) {
|
|
2123
|
+
throw new TypeError('disabledHours() expects an array parameter');
|
|
2124
|
+
}
|
|
2125
|
+
options.disabledHours = indexGivenHours(hours);
|
|
2126
|
+
options.enabledHours = false;
|
|
2127
|
+
if (options.useCurrent && !options.keepInvalid) {
|
|
2128
|
+
var tries = 0;
|
|
2129
|
+
while (!isValid(date, 'h')) {
|
|
2130
|
+
date.add(1, 'h');
|
|
2131
|
+
if (tries === 24) {
|
|
2132
|
+
throw 'Tried 24 times to find a valid date';
|
|
2133
|
+
}
|
|
2134
|
+
tries++;
|
|
2135
|
+
}
|
|
2136
|
+
setValue(date);
|
|
2137
|
+
}
|
|
2138
|
+
update();
|
|
2139
|
+
return picker;
|
|
2140
|
+
};
|
|
2141
|
+
|
|
2142
|
+
picker.enabledHours = function (hours) {
|
|
2143
|
+
///<signature helpKeyword="$.fn.datetimepicker.enabledHours">
|
|
2144
|
+
///<summary>Returns an array with the currently set enabled hours on the component.</summary>
|
|
2145
|
+
///<returns type="array">options.enabledHours</returns>
|
|
2146
|
+
///</signature>
|
|
2147
|
+
///<signature>
|
|
2148
|
+
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledHours if such exist.</summary>
|
|
2149
|
+
///<param name="hours" locid="$.fn.datetimepicker.enabledHours_p:hours">Takes an [ int ] of values and allows the user to select only from those hours.</param>
|
|
2150
|
+
///</signature>
|
|
2151
|
+
if (arguments.length === 0) {
|
|
2152
|
+
return (options.enabledHours ? $.extend({}, options.enabledHours) : options.enabledHours);
|
|
2153
|
+
}
|
|
2154
|
+
|
|
2155
|
+
if (!hours) {
|
|
2156
|
+
options.enabledHours = false;
|
|
2157
|
+
update();
|
|
2158
|
+
return picker;
|
|
2159
|
+
}
|
|
2160
|
+
if (!(hours instanceof Array)) {
|
|
2161
|
+
throw new TypeError('enabledHours() expects an array parameter');
|
|
2162
|
+
}
|
|
2163
|
+
options.enabledHours = indexGivenHours(hours);
|
|
2164
|
+
options.disabledHours = false;
|
|
2165
|
+
if (options.useCurrent && !options.keepInvalid) {
|
|
2166
|
+
var tries = 0;
|
|
2167
|
+
while (!isValid(date, 'h')) {
|
|
2168
|
+
date.add(1, 'h');
|
|
2169
|
+
if (tries === 24) {
|
|
2170
|
+
throw 'Tried 24 times to find a valid date';
|
|
2171
|
+
}
|
|
2172
|
+
tries++;
|
|
2173
|
+
}
|
|
2174
|
+
setValue(date);
|
|
2175
|
+
}
|
|
2176
|
+
update();
|
|
2177
|
+
return picker;
|
|
2178
|
+
};
|
|
2179
|
+
|
|
2180
|
+
picker.viewDate = function (newDate) {
|
|
2181
|
+
///<signature helpKeyword="$.fn.datetimepicker.viewDate">
|
|
2182
|
+
///<summary>Returns the component's model current viewDate, a moment object or null if not set.</summary>
|
|
2183
|
+
///<returns type="Moment">viewDate.clone()</returns>
|
|
2184
|
+
///</signature>
|
|
2185
|
+
///<signature>
|
|
2186
|
+
///<summary>Sets the components model current moment to it. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.</summary>
|
|
2187
|
+
///<param name="newDate" locid="$.fn.datetimepicker.date_p:newDate">Takes string, viewDate, moment, null parameter.</param>
|
|
2188
|
+
///</signature>
|
|
2189
|
+
if (arguments.length === 0) {
|
|
2190
|
+
return viewDate.clone();
|
|
2191
|
+
}
|
|
2192
|
+
|
|
2193
|
+
if (!newDate) {
|
|
2194
|
+
viewDate = date.clone();
|
|
2195
|
+
return picker;
|
|
2196
|
+
}
|
|
2197
|
+
|
|
2198
|
+
if (typeof newDate !== 'string' && !moment.isMoment(newDate) && !(newDate instanceof Date)) {
|
|
2199
|
+
throw new TypeError('viewDate() parameter must be one of [string, moment or Date]');
|
|
2200
|
+
}
|
|
2201
|
+
|
|
2202
|
+
viewDate = parseInputDate(newDate);
|
|
2203
|
+
viewUpdate();
|
|
2204
|
+
return picker;
|
|
2205
|
+
};
|
|
2206
|
+
|
|
1837
2207
|
// initializing element and component attributes
|
|
1838
2208
|
if (element.is('input')) {
|
|
1839
2209
|
input = element;
|
|
@@ -1925,7 +2295,7 @@
|
|
|
1925
2295
|
},
|
|
1926
2296
|
useStrict: false,
|
|
1927
2297
|
sideBySide: false,
|
|
1928
|
-
daysOfWeekDisabled:
|
|
2298
|
+
daysOfWeekDisabled: false,
|
|
1929
2299
|
calendarWeeks: false,
|
|
1930
2300
|
viewMode: 'days',
|
|
1931
2301
|
toolbarPlacement: 'default',
|
|
@@ -1939,6 +2309,7 @@
|
|
|
1939
2309
|
widgetParent: null,
|
|
1940
2310
|
ignoreReadonly: false,
|
|
1941
2311
|
keepOpen: false,
|
|
2312
|
+
focusOnShow: true,
|
|
1942
2313
|
inline: false,
|
|
1943
2314
|
keepInvalid: false,
|
|
1944
2315
|
datepickerInput: '.datepickerinput',
|
|
@@ -2046,6 +2417,11 @@
|
|
|
2046
2417
|
this.clear();
|
|
2047
2418
|
}
|
|
2048
2419
|
},
|
|
2049
|
-
debug: false
|
|
2420
|
+
debug: false,
|
|
2421
|
+
allowInputToggle: false,
|
|
2422
|
+
disabledTimeIntervals: false,
|
|
2423
|
+
disabledHours: false,
|
|
2424
|
+
enabledHours: false,
|
|
2425
|
+
viewDate: false
|
|
2050
2426
|
};
|
|
2051
2427
|
}));
|