UNPKG

@fleetbase/ember-ui

Version:

Fleetbase UI provides all the interface components, helpers, services and utilities for building a Fleetbase extension into the Console.

67 lines (53 loc) 1.93 kB
import { modifier } from 'ember-modifier'; import { isArray } from '@ember/array'; import { isBlank } from '@ember/utils'; import { later } from '@ember/runloop'; import numbersOnly from '../utils/numbers-only'; function calculateOffset(offset = 0, elements) { let calculatedOffset = 0; if (offset) { calculatedOffset += parseInt(numbersOnly(offset)); } if (isArray(elements)) { for (let i = 0; i < elements.length; i++) { const element = elements.objectAt(i); if (element instanceof HTMLElement) { calculatedOffset += element.offsetHeight; } if (typeof element === 'string') { const foundElement = document.querySelector(element); if (foundElement instanceof HTMLElement) { calculatedOffset += foundElement.offsetHeight; } } } } return calculatedOffset; } /** * Creates offset for top/bottom by either a set offset in pixels or elements in which it calculates their heights and uses it as offset * ex {{vertical-offset-by "bottom" (hash offset = 20)}} * ex {{vertical-offset-by "bottom" (hash elements = "#header,.subheader")}} */ export default modifier(function verticalOffsetBy(element, [direction = 'bottom'], { offset = null, elements = null }) { if (isBlank(offset) && isBlank(elements)) { return; } if (typeof elements === 'string' && elements.includes(',')) { elements = elements.split(','); } if (typeof elements === 'string' && elements.includes('|')) { elements = elements.split('|'); } if (typeof elements === 'string') { elements = [elements]; } const calculatedOffset = calculateOffset(offset, elements); later( this, () => { element.style[direction] = `${calculatedOffset}px`; }, 0 ); });