forked from fanruan/fineui
guy
6 years ago
20 changed files with 4687 additions and 4662 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,424 +0,0 @@
|
||||
if(jQuery) { |
||||
BI.extend(jQuery, { |
||||
|
||||
getLeftPosition: function (combo, popup, extraWidth) { |
||||
return { |
||||
left: combo.element.offset().left - popup.element.outerWidth() - (extraWidth || 0) |
||||
}; |
||||
}, |
||||
|
||||
getRightPosition: function (combo, popup, extraWidth) { |
||||
var el = combo.element; |
||||
return { |
||||
left: el.offset().left + el.outerWidth() + (extraWidth || 0) |
||||
}; |
||||
}, |
||||
|
||||
getTopPosition: function (combo, popup, extraHeight) { |
||||
return { |
||||
top: combo.element.offset().top - popup.element.outerHeight() - (extraHeight || 0) |
||||
}; |
||||
}, |
||||
|
||||
getBottomPosition: function (combo, popup, extraHeight) { |
||||
var el = combo.element; |
||||
return { |
||||
top: el.offset().top + el.outerHeight() + (extraHeight || 0) |
||||
}; |
||||
}, |
||||
|
||||
isLeftSpaceEnough: function (combo, popup, extraWidth) { |
||||
return $.getLeftPosition(combo, popup, extraWidth).left >= 0; |
||||
}, |
||||
|
||||
isRightSpaceEnough: function (combo, popup, extraWidth) { |
||||
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
||||
return $.getRightPosition(combo, popup, extraWidth).left + viewBounds.width <= windowBounds.width; |
||||
}, |
||||
|
||||
isTopSpaceEnough: function (combo, popup, extraHeight) { |
||||
return $.getTopPosition(combo, popup, extraHeight).top >= 0; |
||||
}, |
||||
|
||||
isBottomSpaceEnough: function (combo, popup, extraHeight) { |
||||
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
||||
return $.getBottomPosition(combo, popup, extraHeight).top + viewBounds.height <= windowBounds.height; |
||||
}, |
||||
|
||||
isRightSpaceLarger: function (combo) { |
||||
var windowBounds = $("body").bounds(); |
||||
return windowBounds.width - combo.element.offset().left - combo.element.bounds().width >= combo.element.offset().left; |
||||
}, |
||||
|
||||
isBottomSpaceLarger: function (combo) { |
||||
var windowBounds = $("body").bounds(); |
||||
return windowBounds.height - combo.element.offset().top - combo.element.bounds().height >= combo.element.offset().top; |
||||
}, |
||||
|
||||
getLeftAlignPosition: function (combo, popup, extraWidth) { |
||||
var viewBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
||||
var left = combo.element.offset().left + extraWidth; |
||||
if (left + viewBounds.width > windowBounds.width) { |
||||
left = windowBounds.width - viewBounds.width; |
||||
} |
||||
if (left < 0) { |
||||
left = 0; |
||||
} |
||||
return { |
||||
left: left |
||||
}; |
||||
}, |
||||
|
||||
getLeftAdaptPosition: function (combo, popup, extraWidth) { |
||||
if ($.isLeftSpaceEnough(combo, popup, extraWidth)) { |
||||
return $.getLeftPosition(combo, popup, extraWidth); |
||||
} |
||||
return { |
||||
left: 0 |
||||
}; |
||||
}, |
||||
|
||||
getRightAlignPosition: function (combo, popup, extraWidth) { |
||||
var comboBounds = combo.element.bounds(), viewBounds = popup.element.bounds(); |
||||
var left = combo.element.offset().left + comboBounds.width - viewBounds.width - extraWidth; |
||||
if (left < 0) { |
||||
left = 0; |
||||
} |
||||
return { |
||||
left: left |
||||
}; |
||||
}, |
||||
|
||||
getRightAdaptPosition: function (combo, popup, extraWidth) { |
||||
if ($.isRightSpaceEnough(combo, popup, extraWidth)) { |
||||
return $.getRightPosition(combo, popup, extraWidth); |
||||
} |
||||
return { |
||||
left: $("body").bounds().width - popup.element.bounds().width |
||||
}; |
||||
}, |
||||
|
||||
getTopAlignPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
||||
var comboOffset = combo.element.offset(); |
||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||
windowBounds = $("body").bounds(); |
||||
var top, adaptHeight; |
||||
if ($.isBottomSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { |
||||
top = comboOffset.top + extraHeight; |
||||
} else if (needAdaptHeight) { |
||||
top = comboOffset.top + extraHeight; |
||||
adaptHeight = windowBounds.height - top; |
||||
} else { |
||||
top = windowBounds.height - popupBounds.height; |
||||
if (top < extraHeight) { |
||||
adaptHeight = windowBounds.height - extraHeight; |
||||
} |
||||
} |
||||
if (top < extraHeight) { |
||||
top = extraHeight; |
||||
} |
||||
return adaptHeight ? { |
||||
top: top, |
||||
adaptHeight: adaptHeight |
||||
} : { |
||||
top: top |
||||
}; |
||||
}, |
||||
|
||||
getTopAdaptPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
||||
var popupBounds = popup.element.bounds(), windowBounds = $("body").bounds(); |
||||
if ($.isTopSpaceEnough(combo, popup, extraHeight)) { |
||||
return $.getTopPosition(combo, popup, extraHeight); |
||||
} |
||||
if (needAdaptHeight) { |
||||
return { |
||||
top: 0, |
||||
adaptHeight: combo.element.offset().top - extraHeight |
||||
}; |
||||
} |
||||
if (popupBounds.height + extraHeight > windowBounds.height) { |
||||
return { |
||||
top: 0, |
||||
adaptHeight: windowBounds.height - extraHeight |
||||
}; |
||||
} |
||||
return { |
||||
top: 0 |
||||
}; |
||||
}, |
||||
|
||||
getBottomAlignPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
||||
var comboOffset = combo.element.offset(); |
||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||
windowBounds = $("body").bounds(); |
||||
var top, adaptHeight; |
||||
if ($.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { |
||||
top = comboOffset.top + comboBounds.height - popupBounds.height - extraHeight; |
||||
} else if (needAdaptHeight) { |
||||
top = 0; |
||||
adaptHeight = comboOffset.top + comboBounds.height - extraHeight; |
||||
} else { |
||||
top = 0; |
||||
if (popupBounds.height + extraHeight > windowBounds.height) { |
||||
adaptHeight = windowBounds.height - extraHeight; |
||||
} |
||||
} |
||||
if (top < 0) { |
||||
top = 0; |
||||
} |
||||
return adaptHeight ? { |
||||
top: top, |
||||
adaptHeight: adaptHeight |
||||
} : { |
||||
top: top |
||||
}; |
||||
}, |
||||
|
||||
getBottomAdaptPosition: function (combo, popup, extraHeight, needAdaptHeight) { |
||||
var comboOffset = combo.element.offset(); |
||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||
windowBounds = $("body").bounds(); |
||||
if ($.isBottomSpaceEnough(combo, popup, extraHeight)) { |
||||
return $.getBottomPosition(combo, popup, extraHeight); |
||||
} |
||||
if (needAdaptHeight) { |
||||
return { |
||||
top: comboOffset.top + comboBounds.height + extraHeight, |
||||
adaptHeight: windowBounds.height - comboOffset.top - comboBounds.height - extraHeight |
||||
}; |
||||
} |
||||
if (popupBounds.height + extraHeight > windowBounds.height) { |
||||
return { |
||||
top: extraHeight, |
||||
adaptHeight: windowBounds.height - extraHeight |
||||
}; |
||||
} |
||||
return { |
||||
top: windowBounds.height - popupBounds.height - extraHeight |
||||
}; |
||||
}, |
||||
|
||||
getCenterAdaptPosition: function (combo, popup) { |
||||
var comboOffset = combo.element.offset(); |
||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||
windowBounds = $("body").bounds(); |
||||
var left; |
||||
if (comboOffset.left + comboBounds.width / 2 + popupBounds.width / 2 > windowBounds.width) { |
||||
left = windowBounds.width - popupBounds.width; |
||||
} else { |
||||
left = comboOffset.left + comboBounds.width / 2 - popupBounds.width / 2; |
||||
} |
||||
if (left < 0) { |
||||
left = 0; |
||||
} |
||||
return { |
||||
left: left |
||||
}; |
||||
}, |
||||
|
||||
getMiddleAdaptPosition: function (combo, popup) { |
||||
var comboOffset = combo.element.offset(); |
||||
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), |
||||
windowBounds = $("body").bounds(); |
||||
var top; |
||||
if (comboOffset.top + comboBounds.height / 2 + popupBounds.height / 2 > windowBounds.height) { |
||||
top = windowBounds.height - popupBounds.height; |
||||
} else { |
||||
top = comboOffset.top + comboBounds.height / 2 - popupBounds.height / 2; |
||||
} |
||||
if (top < 0) { |
||||
top = 0; |
||||
} |
||||
return { |
||||
top: top |
||||
}; |
||||
}, |
||||
|
||||
getComboPositionByDirections: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions) { |
||||
extraWidth || (extraWidth = 0); |
||||
extraHeight || (extraHeight = 0); |
||||
var i, direct; |
||||
var leftRight = [], topBottom = []; |
||||
var isNeedAdaptHeight = false, tbFirst = false, lrFirst = false; |
||||
var left, top, pos; |
||||
for (i = 0; i < directions.length; i++) { |
||||
direct = directions[i]; |
||||
switch (direct) { |
||||
case "left": |
||||
leftRight.push(direct); |
||||
break; |
||||
case "right": |
||||
leftRight.push(direct); |
||||
break; |
||||
case "top": |
||||
topBottom.push(direct); |
||||
break; |
||||
case "bottom": |
||||
topBottom.push(direct); |
||||
break; |
||||
} |
||||
} |
||||
for (i = 0; i < directions.length; i++) { |
||||
direct = directions[i]; |
||||
switch (direct) { |
||||
case "left": |
||||
if (!isNeedAdaptHeight) { |
||||
var tW = tbFirst ? extraHeight : extraWidth, tH = tbFirst ? 0 : extraHeight; |
||||
if ($.isLeftSpaceEnough(combo, popup, tW)) { |
||||
left = $.getLeftPosition(combo, popup, tW).left; |
||||
if (topBottom[0] === "bottom") { |
||||
pos = $.getTopAlignPosition(combo, popup, tH, needAdaptHeight); |
||||
pos.dir = "left,bottom"; |
||||
} else { |
||||
pos = $.getBottomAlignPosition(combo, popup, tH, needAdaptHeight); |
||||
pos.dir = "left,top"; |
||||
} |
||||
if (tbFirst) { |
||||
pos.change = "left"; |
||||
} |
||||
pos.left = left; |
||||
return pos; |
||||
} |
||||
} |
||||
lrFirst = true; |
||||
break; |
||||
case "right": |
||||
if (!isNeedAdaptHeight) { |
||||
var tW = tbFirst ? extraHeight : extraWidth, tH = tbFirst ? extraWidth : extraHeight; |
||||
if ($.isRightSpaceEnough(combo, popup, tW)) { |
||||
left = $.getRightPosition(combo, popup, tW).left; |
||||
if (topBottom[0] === "bottom") { |
||||
pos = $.getTopAlignPosition(combo, popup, tH, needAdaptHeight); |
||||
pos.dir = "right,bottom"; |
||||
} else { |
||||
pos = $.getBottomAlignPosition(combo, popup, tH, needAdaptHeight); |
||||
pos.dir = "right,top"; |
||||
} |
||||
if (tbFirst) { |
||||
pos.change = "right"; |
||||
} |
||||
pos.left = left; |
||||
return pos; |
||||
} |
||||
} |
||||
lrFirst = true; |
||||
break; |
||||
case "top": |
||||
var tW = lrFirst ? extraHeight : extraWidth, tH = lrFirst ? extraWidth : extraHeight; |
||||
if ($.isTopSpaceEnough(combo, popup, tH)) { |
||||
top = $.getTopPosition(combo, popup, tH).top; |
||||
if (leftRight[0] === "right") { |
||||
pos = $.getLeftAlignPosition(combo, popup, tW, needAdaptHeight); |
||||
pos.dir = "top,right"; |
||||
} else { |
||||
pos = $.getRightAlignPosition(combo, popup, tW); |
||||
pos.dir = "top,left"; |
||||
} |
||||
if (lrFirst) { |
||||
pos.change = "top"; |
||||
} |
||||
pos.top = top; |
||||
return pos; |
||||
} |
||||
if (needAdaptHeight) { |
||||
isNeedAdaptHeight = true; |
||||
} |
||||
tbFirst = true; |
||||
break; |
||||
case "bottom": |
||||
var tW = lrFirst ? extraHeight : extraWidth, tH = lrFirst ? extraWidth : extraHeight; |
||||
if ($.isBottomSpaceEnough(combo, popup, tH)) { |
||||
top = $.getBottomPosition(combo, popup, tH).top; |
||||
if (leftRight[0] === "right") { |
||||
pos = $.getLeftAlignPosition(combo, popup, tW, needAdaptHeight); |
||||
pos.dir = "bottom,right"; |
||||
} else { |
||||
pos = $.getRightAlignPosition(combo, popup, tW); |
||||
pos.dir = "bottom,left"; |
||||
} |
||||
if (lrFirst) { |
||||
pos.change = "bottom"; |
||||
} |
||||
pos.top = top; |
||||
return pos; |
||||
} |
||||
if (needAdaptHeight) { |
||||
isNeedAdaptHeight = true; |
||||
} |
||||
tbFirst = true; |
||||
break; |
||||
} |
||||
} |
||||
|
||||
switch (directions[0]) { |
||||
case "left": |
||||
case "right": |
||||
if ($.isRightSpaceLarger(combo)) { |
||||
left = $.getRightAdaptPosition(combo, popup, extraWidth).left; |
||||
} else { |
||||
left = $.getLeftAdaptPosition(combo, popup, extraWidth).left; |
||||
} |
||||
if (topBottom[0] === "bottom") { |
||||
pos = $.getTopAlignPosition(combo, popup, extraHeight, needAdaptHeight); |
||||
pos.left = left; |
||||
pos.dir = directions[0] + ",bottom"; |
||||
return pos; |
||||
} |
||||
pos = $.getBottomAlignPosition(combo, popup, extraHeight, needAdaptHeight); |
||||
pos.left = left; |
||||
pos.dir = directions[0] + ",top"; |
||||
return pos; |
||||
default : |
||||
if ($.isBottomSpaceLarger(combo)) { |
||||
pos = $.getBottomAdaptPosition(combo, popup, extraHeight, needAdaptHeight); |
||||
} else { |
||||
pos = $.getTopAdaptPosition(combo, popup, extraHeight, needAdaptHeight); |
||||
} |
||||
if (leftRight[0] === "right") { |
||||
left = $.getLeftAlignPosition(combo, popup, extraWidth, needAdaptHeight).left; |
||||
pos.left = left; |
||||
pos.dir = directions[0] + ",right"; |
||||
return pos; |
||||
} |
||||
left = $.getRightAlignPosition(combo, popup, extraWidth).left; |
||||
pos.left = left; |
||||
pos.dir = directions[0] + ",left"; |
||||
return pos; |
||||
} |
||||
}, |
||||
|
||||
|
||||
getComboPosition: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions, offsetStyle) { |
||||
extraWidth || (extraWidth = 0); |
||||
extraHeight || (extraHeight = 0); |
||||
var bodyHeight = $("body").bounds().height - extraHeight; |
||||
var maxHeight = Math.min(popup.attr("maxHeight") || bodyHeight, bodyHeight); |
||||
popup.resetHeight && popup.resetHeight(maxHeight); |
||||
var position = $.getComboPositionByDirections(combo, popup, extraWidth, extraHeight, needAdaptHeight, directions || ["bottom", "top", "right", "left"]); |
||||
switch (offsetStyle) { |
||||
case "center": |
||||
if (position.change) { |
||||
var p = $.getMiddleAdaptPosition(combo, popup); |
||||
position.top = p.top; |
||||
} else { |
||||
var p = $.getCenterAdaptPosition(combo, popup); |
||||
position.left = p.left; |
||||
} |
||||
break; |
||||
case "middle": |
||||
if (position.change) { |
||||
var p = $.getCenterAdaptPosition(combo, popup); |
||||
position.left = p.left; |
||||
} else { |
||||
var p = $.getMiddleAdaptPosition(combo, popup); |
||||
position.top = p.top; |
||||
} |
||||
break; |
||||
} |
||||
if (needAdaptHeight === true) { |
||||
popup.resetHeight && popup.resetHeight(Math.min(bodyHeight - position.top, maxHeight)); |
||||
} |
||||
return position; |
||||
} |
||||
}); |
||||
} |
Loading…
Reference in new issue