date_picker 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}));
|