|
|
@ -250,12 +250,12 @@ |
|
|
|
|
|
|
|
|
|
|
|
_getLeftAlignPosition: function (combo, popup, extraWidth, container) { |
|
|
|
_getLeftAlignPosition: function (combo, popup, extraWidth, container) { |
|
|
|
var comboRect = combo.element[0].getBoundingClientRect(), |
|
|
|
var comboRect = combo.element[0].getBoundingClientRect(), |
|
|
|
popupRect = popup.element.bounds(), |
|
|
|
popupRect = popup.element[0].getBoundingClientRect(), |
|
|
|
viewportRect = document.documentElement.getBoundingClientRect(), |
|
|
|
viewportRect = document.documentElement.getBoundingClientRect(), |
|
|
|
containerRect = container ? container.getBoundingClientRect() : { left: 0 }; |
|
|
|
containerRect = container ? container.getBoundingClientRect() : { left: 0 }; |
|
|
|
var left = comboRect.left - containerRect.left + extraWidth; |
|
|
|
var left = comboRect.left - containerRect.left + extraWidth; |
|
|
|
|
|
|
|
|
|
|
|
if (left + popupRect.width - containerRect.left > viewportRect.width) { |
|
|
|
if (comboRect.left + popupRect.width > viewportRect.width) { |
|
|
|
left = viewportRect.width - popupRect.width - containerRect.left; |
|
|
|
left = viewportRect.width - popupRect.width - containerRect.left; |
|
|
|
} |
|
|
|
} |
|
|
|
return left; |
|
|
|
return left; |
|
|
@ -265,12 +265,13 @@ |
|
|
|
var left = this._getLeftAlignPosition(combo, popup, extraWidth, container); |
|
|
|
var left = this._getLeftAlignPosition(combo, popup, extraWidth, container); |
|
|
|
var dir = ""; |
|
|
|
var dir = ""; |
|
|
|
// 如果放不下,优先使用RightAlign, 如果RightAlign也放不下, 再使用left=0
|
|
|
|
// 如果放不下,优先使用RightAlign, 如果RightAlign也放不下, 再使用left=0
|
|
|
|
if (left < 0) { |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : { left: 0 }; |
|
|
|
|
|
|
|
if (left + containerRect.left < 0) { |
|
|
|
left = this._getRightAlignPosition(combo, popup, extraWidth); |
|
|
|
left = this._getRightAlignPosition(combo, popup, extraWidth); |
|
|
|
dir = "left"; |
|
|
|
dir = "left"; |
|
|
|
} |
|
|
|
} |
|
|
|
if (left < 0) { |
|
|
|
if (left + containerRect.left < 0) { |
|
|
|
left = 0; |
|
|
|
left = 0 - containerRect.left; |
|
|
|
} |
|
|
|
} |
|
|
|
return { |
|
|
|
return { |
|
|
|
left: left, |
|
|
|
left: left, |
|
|
@ -678,8 +679,8 @@ |
|
|
|
getComboPosition: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions, offsetStyle, positionRelativeElement) { |
|
|
|
getComboPosition: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions, offsetStyle, positionRelativeElement) { |
|
|
|
extraWidth || (extraWidth = 0); |
|
|
|
extraWidth || (extraWidth = 0); |
|
|
|
extraHeight || (extraHeight = 0); |
|
|
|
extraHeight || (extraHeight = 0); |
|
|
|
var bodyHeight = BI.Widget._renderEngine.createElement("body").bounds().height - extraHeight; |
|
|
|
var viewportBounds = document.documentElement.getBoundingClientRect(); |
|
|
|
var maxHeight = Math.min(popup.attr("maxHeight") || bodyHeight, bodyHeight); |
|
|
|
var maxHeight = Math.min(popup.attr("maxHeight") || viewportBounds.height, viewportBounds.height); |
|
|
|
popup.resetHeight && popup.resetHeight(maxHeight); |
|
|
|
popup.resetHeight && popup.resetHeight(maxHeight); |
|
|
|
var position = BI.DOM.getComboPositionByDirections(combo, popup, extraWidth, extraHeight, needAdaptHeight, directions || ["bottom", "top", "right", "left"], positionRelativeElement); |
|
|
|
var position = BI.DOM.getComboPositionByDirections(combo, popup, extraWidth, extraHeight, needAdaptHeight, directions || ["bottom", "top", "right", "left"], positionRelativeElement); |
|
|
|
switch (offsetStyle) { |
|
|
|
switch (offsetStyle) { |
|
|
@ -703,7 +704,7 @@ |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (needAdaptHeight === true) { |
|
|
|
if (needAdaptHeight === true) { |
|
|
|
popup.resetHeight && popup.resetHeight(Math.min(bodyHeight - position.top + (positionRelativeElement ? positionRelativeElement.getBoundingClientRect().top : 0), maxHeight)); |
|
|
|
popup.resetHeight && popup.resetHeight(Math.min(viewportBounds.height - position.top + (positionRelativeElement ? positionRelativeElement.getBoundingClientRect().top : 0), maxHeight)); |
|
|
|
} |
|
|
|
} |
|
|
|
return position; |
|
|
|
return position; |
|
|
|
}, |
|
|
|
}, |
|
|
|