FIX: better left/right positioning in select-kit components (#6824)

This commit is contained in:
Joffrey JAFFEUX 2018-12-28 19:46:31 +01:00 committed by GitHub
parent 0f09cb50e9
commit 7b15b87cf5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 25 additions and 11 deletions

View File

@ -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");
}
}
}