aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorCa-Phun Ung <pazu2k@gmail.com>2009-01-04 15:13:01 +0000
committerCa-Phun Ung <pazu2k@gmail.com>2009-01-04 15:13:01 +0000
commitacbe714b53fd483bfe902ec1b4850046f2be173b (patch)
tree850f2c8a1b10ea7dd89fbad80a4f28453dc3598f /ui
parentedc6f634dc1ba76251e07e65bb364d1a77cba1e5 (diff)
downloadjquery-ui-acbe714b53fd483bfe902ec1b4850046f2be173b.tar.gz
jquery-ui-acbe714b53fd483bfe902ec1b4850046f2be173b.zip
datepicker: Fixes regression in #3232 [datepicker position problem in IE 6/7]: added back functionality to detect whether the datepicker displays outside a viewpoint. Additionally if the viewpoint is too small to fit the datepicker it will show in its usual position regardless. I have also added a visual test case for this.
Diffstat (limited to 'ui')
-rw-r--r--ui/ui.datepicker.js18
1 files changed, 15 insertions, 3 deletions
diff --git a/ui/ui.datepicker.js b/ui/ui.datepicker.js
index 1c4ffbc19..c50a606b9 100644
--- a/ui/ui.datepicker.js
+++ b/ui/ui.datepicker.js
@@ -608,10 +608,22 @@ $.extend(Datepicker.prototype, {
},
/* Check positioning to remain on screen. */
- _checkOffset: function(inst, offset, isFixed) {
- offset.left -= (this._get(inst, 'isRTL') ? (inst.dpDiv.outerWidth() - inst.input.outerWidth()) : 0);
+ _checkOffset: function(inst, offset, isFixed) {
+ var dpWidth = inst.dpDiv.outerWidth();
+ var dpHeight = inst.dpDiv.outerHeight();
+ var inputWidth = inst.input ? inst.input.outerWidth() : 0;
+ var inputHeight = inst.input ? inst.input.outerHeight() : 0;
+ var viewWidth = window.innerWidth || document.documentElement.clientWidth;
+ var viewHeight = window.innerHeight || document.documentElement.clientHeight;
+
+ offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
- offset.top -= (isFixed && offset.top == (inst.input.offset().top + inst.input.outerHeight())) ? $(document).scrollTop() : 0;
+ offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+ // now check if datepicker is showing outside window viewpoint - move to a better place if so.
+ offset.left -= (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0;
+ offset.top -= (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(offset.top + dpHeight + inputHeight*2 - viewHeight) : 0;
+
return offset;
},