ember-ui-components
Version:
A collection of common user interface components
68 lines (59 loc) • 1.6 kB
JavaScript
/**
@module ember-ui-components
*/
import Component from '@ember/component';
import layout from '../templates/components/uic-menu-container';
import getDimensions from 'ember-ui-components/utils/get-dimensions';
import calculatePosition from 'ember-ui-components/utils/calculate-position';
/**
@class MenuContainerComponent
@namespace Components
*/
export default Component.extend({
layout,
/**
@property classNames
@type {Array}
@private
@default `['uic-menu-container']`
*/
classNames: ['uic-menu-container'],
/**
@method getParentMenu
@private
@return {Object}
*/
getParentMenu() {
return this.$().parents('.uic-menu-container');
},
/**
@method didInsertMenu
@private
*/
didInsertMenu() {
let element = this.$();
let el = getDimensions(element);
let windowHeight = window.innerHeight || document.documentElement.clientHeight;
let windowWidth = window.innerWidth || document.documentElement.clientWidth;
let rect;
let parent = this.getParentMenu();
let css = {
top: calculatePosition( element.position().top, el.height, windowHeight - 5)
};
if (element) {
rect = element[0].getBoundingClientRect();
if (rect.right > windowWidth && parent.offset()) {
css.left = (element.css('position') === 'fixed') ? (parent.offset().left - el.width) + 15 : (el.width + parent.width() - 45) * -1;
}
element.css(css);
}
},
/**
@event didInsertElement
@private
*/
didInsertElement() {
this._super(...arguments);
this.didInsertMenu();
}
});