|
1270 | 1270 |
|
1271 | 1271 | function isValidTime(time) |
1272 | 1272 | { |
| 1273 | + time = parseInt(time, 10); |
1273 | 1274 | if (opt.startDate && compare_day(time, opt.startDate) < 0) return false; |
1274 | 1275 | if (opt.endDate && compare_day(time, opt.endDate) > 0) return false; |
1275 | 1276 |
|
1276 | 1277 | if (opt.start && !opt.end && !opt.singleDate) |
1277 | 1278 | { |
| 1279 | + //check maxDays and minDays setting |
1278 | 1280 | if (opt.maxDays > 0 && countDays(time, opt.start) > opt.maxDays) return false; |
1279 | 1281 | if (opt.minDays > 0 && countDays(time, opt.start) < opt.minDays) return false; |
1280 | 1282 |
|
| 1283 | + //check selectForward and selectBackward |
1281 | 1284 | if (opt.selectForward && time < opt.start ) return false; |
1282 | 1285 | if (opt.selectBackward && time > opt.start) return false; |
| 1286 | + |
| 1287 | + //check disabled days |
| 1288 | + if (opt.beforeShowDay && typeof opt.beforeShowDay == 'function') |
| 1289 | + { |
| 1290 | + var valid = true; |
| 1291 | + var timeTmp = time; |
| 1292 | + while( countDays(timeTmp, opt.start) > 1 ) |
| 1293 | + { |
| 1294 | + var arr = opt.beforeShowDay( new Date(timeTmp) ); |
| 1295 | + if (!arr[0]) |
| 1296 | + { |
| 1297 | + valid = false; |
| 1298 | + break; |
| 1299 | + } |
| 1300 | + if (timeTmp > opt.start) timeTmp -= 86400000; |
| 1301 | + if (timeTmp < opt.start) timeTmp += 86400000; |
| 1302 | + } |
| 1303 | + if (!valid) return false; |
| 1304 | + } |
1283 | 1305 | } |
| 1306 | + return true; |
1284 | 1307 | } |
1285 | 1308 |
|
1286 | 1309 |
|
|
1289 | 1312 | box.find('.day.invalid.tmp').removeClass('tmp invalid').addClass('valid'); |
1290 | 1313 | if (opt.start && !opt.end) |
1291 | 1314 | { |
1292 | | - var time = opt.start; |
1293 | | - var firstInvalid = 0, lastInvalid = 143403840000000; //a really large number |
1294 | | - box.find('.day.toMonth.invalid').not('.tmp').each(function() |
1295 | | - { |
1296 | | - var _time = parseInt($(this).attr('time')); |
1297 | | - if (_time > time && _time < lastInvalid) |
1298 | | - { |
1299 | | - lastInvalid = _time; |
1300 | | - } |
1301 | | - else if (_time < time && _time > firstInvalid) |
1302 | | - { |
1303 | | - firstInvalid = _time; |
1304 | | - } |
1305 | | - }); |
1306 | | - |
1307 | 1315 | box.find('.day.toMonth.valid').each(function() |
1308 | 1316 | { |
1309 | | - var time = parseInt($(this).attr('time')); |
1310 | | - if ( time <= firstInvalid || time >= lastInvalid) |
1311 | | - { |
1312 | | - $(this).addClass('invalid').addClass('tmp').removeClass('valid'); |
1313 | | - } |
1314 | | - |
| 1317 | + var time = parseInt($(this).attr('time'), 10); |
1315 | 1318 | if (!isValidTime(time)) |
1316 | 1319 | $(this).addClass('invalid tmp').removeClass('valid'); |
1317 | 1320 | else |
|
1325 | 1328 |
|
1326 | 1329 | function dayHovering(day) |
1327 | 1330 | { |
1328 | | - if (day.hasClass('invalid')) return; |
1329 | 1331 | var hoverTime = parseInt(day.attr('time')); |
| 1332 | + var tooltip = ''; |
1330 | 1333 |
|
1331 | | - if (opt.singleDate) |
| 1334 | + if (day.hasClass('has-tooltip') && day.attr('data-tooltip')) |
1332 | 1335 | { |
1333 | | - box.find('.day.hovering').removeClass('hovering'); |
1334 | | - day.addClass('hovering'); |
| 1336 | + tooltip = '<span style="white-space:nowrap">'+day.attr('data-tooltip')+'</span>'; |
1335 | 1337 | } |
1336 | | - else |
| 1338 | + else if (!day.hasClass('invalid')) |
1337 | 1339 | { |
1338 | | - box.find('.day').each(function() |
| 1340 | + if (opt.singleDate) |
1339 | 1341 | { |
1340 | | - var time = parseInt($(this).attr('time')), |
1341 | | - start = opt.start, |
1342 | | - end = opt.end; |
1343 | | - |
1344 | | - if ( time == hoverTime ) |
1345 | | - { |
1346 | | - $(this).addClass('hovering'); |
1347 | | - } |
1348 | | - else |
1349 | | - { |
1350 | | - $(this).removeClass('hovering'); |
1351 | | - } |
1352 | | - |
1353 | | - if ( |
1354 | | - ( opt.start && !opt.end ) |
1355 | | - && |
1356 | | - ( |
1357 | | - ( opt.start < time && hoverTime >= time ) |
1358 | | - || |
1359 | | - ( opt.start > time && hoverTime <= time ) |
1360 | | - ) |
1361 | | - ) |
1362 | | - { |
1363 | | - $(this).addClass('hovering'); |
1364 | | - } |
1365 | | - else |
1366 | | - { |
1367 | | - $(this).removeClass('hovering'); |
1368 | | - } |
1369 | | - }); |
1370 | | - |
1371 | | - if (opt.start && !opt.end) |
| 1342 | + box.find('.day.hovering').removeClass('hovering'); |
| 1343 | + day.addClass('hovering'); |
| 1344 | + } |
| 1345 | + else |
1372 | 1346 | { |
1373 | | - var days = countDays(hoverTime, opt.start); |
1374 | | - var tooltip = ''; |
1375 | | - if (opt.hoveringTooltip) |
| 1347 | + box.find('.day').each(function() |
1376 | 1348 | { |
1377 | | - if (typeof opt.hoveringTooltip == 'function') |
| 1349 | + var time = parseInt($(this).attr('time')), |
| 1350 | + start = opt.start, |
| 1351 | + end = opt.end; |
| 1352 | + |
| 1353 | + if ( time == hoverTime ) |
1378 | 1354 | { |
1379 | | - tooltip = opt.hoveringTooltip(days, opt.start, hoverTime); |
| 1355 | + $(this).addClass('hovering'); |
1380 | 1356 | } |
1381 | | - else if (opt.hoveringTooltip === true && days > 1) |
| 1357 | + else |
1382 | 1358 | { |
1383 | | - tooltip = days + ' ' + lang('days'); |
| 1359 | + $(this).removeClass('hovering'); |
1384 | 1360 | } |
1385 | | - } |
1386 | | - if (tooltip) |
1387 | | - { |
1388 | | - var posDay = day.offset(); |
1389 | | - var posBox = box.offset(); |
1390 | | - |
1391 | | - var _left = posDay.left - posBox.left; |
1392 | | - var _top = posDay.top - posBox.top; |
1393 | | - _left += day.width()/2; |
1394 | | - |
1395 | 1361 |
|
1396 | | - var $tip = box.find('.date-range-length-tip'); |
1397 | | - var w = $tip.css({'visibility':'hidden', 'display':'none'}).html(tooltip).width(); |
1398 | | - var h = $tip.height(); |
1399 | | - _left -= w/2; |
1400 | | - _top -= h; |
1401 | | - setTimeout(function() |
| 1362 | + if ( |
| 1363 | + ( opt.start && !opt.end ) |
| 1364 | + && |
| 1365 | + ( |
| 1366 | + ( opt.start < time && hoverTime >= time ) |
| 1367 | + || |
| 1368 | + ( opt.start > time && hoverTime <= time ) |
| 1369 | + ) |
| 1370 | + ) |
1402 | 1371 | { |
1403 | | - $tip.css({left:_left, top:_top, display:'block','visibility':'visible'}); |
1404 | | - },10); |
1405 | | - } |
1406 | | - else |
| 1372 | + $(this).addClass('hovering'); |
| 1373 | + } |
| 1374 | + else |
| 1375 | + { |
| 1376 | + $(this).removeClass('hovering'); |
| 1377 | + } |
| 1378 | + }); |
| 1379 | + |
| 1380 | + if (opt.start && !opt.end) |
1407 | 1381 | { |
1408 | | - box.find('.date-range-length-tip').hide(); |
| 1382 | + var days = countDays(hoverTime, opt.start); |
| 1383 | + if (opt.hoveringTooltip) |
| 1384 | + { |
| 1385 | + if (typeof opt.hoveringTooltip == 'function') |
| 1386 | + { |
| 1387 | + tooltip = opt.hoveringTooltip(days, opt.start, hoverTime); |
| 1388 | + } |
| 1389 | + else if (opt.hoveringTooltip === true && days > 1) |
| 1390 | + { |
| 1391 | + tooltip = days + ' ' + lang('days'); |
| 1392 | + } |
| 1393 | + } |
1409 | 1394 | } |
1410 | 1395 | } |
1411 | 1396 | } |
| 1397 | + |
| 1398 | + if (tooltip) |
| 1399 | + { |
| 1400 | + var posDay = day.offset(); |
| 1401 | + var posBox = box.offset(); |
| 1402 | + |
| 1403 | + var _left = posDay.left - posBox.left; |
| 1404 | + var _top = posDay.top - posBox.top; |
| 1405 | + _left += day.width()/2; |
| 1406 | + |
| 1407 | + |
| 1408 | + var $tip = box.find('.date-range-length-tip'); |
| 1409 | + var w = $tip.css({'visibility':'hidden', 'display':'none'}).html(tooltip).width(); |
| 1410 | + var h = $tip.height(); |
| 1411 | + _left -= w/2; |
| 1412 | + _top -= h; |
| 1413 | + setTimeout(function() |
| 1414 | + { |
| 1415 | + $tip.css({left:_left, top:_top, display:'block','visibility':'visible'}); |
| 1416 | + },10); |
| 1417 | + } |
| 1418 | + else |
| 1419 | + { |
| 1420 | + box.find('.date-range-length-tip').hide(); |
| 1421 | + } |
1412 | 1422 | } |
1413 | 1423 |
|
1414 | 1424 | function clearHovering() |
|
2094 | 2104 | var highlightToday = moment(today.time).format('L') == moment(now).format('L'); |
2095 | 2105 | today.extraClass = ''; |
2096 | 2106 | today.tooltip = ''; |
2097 | | - if(opt.beforeShowDay && typeof opt.beforeShowDay == 'function') |
| 2107 | + if(today.valid && opt.beforeShowDay && typeof opt.beforeShowDay == 'function') |
2098 | 2108 | { |
2099 | 2109 | var _r = opt.beforeShowDay(moment(today.time).toDate()); |
2100 | 2110 | today.valid = _r[0]; |
|
2105 | 2115 |
|
2106 | 2116 | todayDivAttr = { |
2107 | 2117 | time: today.time, |
2108 | | - title: today.tooltip, |
| 2118 | + 'data-tooltip': today.tooltip, |
2109 | 2119 | 'class': 'day '+today.type+' '+today.extraClass+' '+(today.valid ? 'valid' : 'invalid')+' '+(highlightToday?'real-today':'') |
2110 | 2120 | }; |
2111 | 2121 |
|
|
0 commit comments