FIX: better left/right positioning in select-kit components (#6824)
This commit is contained in:
parent
0f09cb50e9
commit
7b15b87cf5
|
@ -192,29 +192,43 @@ export default Ember.Mixin.create({
|
|||
: windowWidth;
|
||||
const bodyWidth = this._computedStyle(this.$body()[0], "width");
|
||||
|
||||
let marginToEdge;
|
||||
let spaceToLeftEdge;
|
||||
if (this.$scrollableParent().length) {
|
||||
marginToEdge =
|
||||
spaceToLeftEdge =
|
||||
this.$().offset().left - this.$scrollableParent().offset().left;
|
||||
} else {
|
||||
marginToEdge = this.get("element").getBoundingClientRect().left;
|
||||
spaceToLeftEdge = this.get("element").getBoundingClientRect().left;
|
||||
}
|
||||
|
||||
const enoughMarginToOppositeEdge =
|
||||
parentWidth - marginToEdge - bodyWidth + this.get("horizontalOffset") >
|
||||
0;
|
||||
if (enoughMarginToOppositeEdge) {
|
||||
let isLeftAligned = true;
|
||||
const spaceToRightEdge = parentWidth - spaceToLeftEdge;
|
||||
const elementWidth = this.get("element").getBoundingClientRect().width;
|
||||
if (spaceToRightEdge > spaceToLeftEdge + elementWidth) {
|
||||
isLeftAligned = false;
|
||||
}
|
||||
|
||||
if (isLeftAligned) {
|
||||
this.$()
|
||||
.addClass("is-left-aligned")
|
||||
.removeClass("is-right-aligned");
|
||||
options.left = this.get("horizontalOffset");
|
||||
options.right = "unset";
|
||||
|
||||
if (this._isRTL()) {
|
||||
options.right = this.get("horizontalOffset");
|
||||
} else {
|
||||
options.left =
|
||||
-bodyWidth + elementWidth - this.get("horizontalOffset");
|
||||
}
|
||||
} else {
|
||||
this.$()
|
||||
.addClass("is-right-aligned")
|
||||
.removeClass("is-left-aligned");
|
||||
options.left = "unset";
|
||||
options.right = this.get("horizontalOffset");
|
||||
|
||||
if (this._isRTL()) {
|
||||
options.right =
|
||||
-bodyWidth + elementWidth - this.get("horizontalOffset");
|
||||
} else {
|
||||
options.left = this.get("horizontalOffset");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue