UNPKG

@neocomplexx/ngx-neo-directives

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.

98 lines 6.84 kB
/** * @fileoverview added by tsickle * Generated from: lib/neo-matchheight.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, Input, HostListener } from '@angular/core'; export class NeoMatchHeightDirective { /** * @param {?} el */ constructor(el) { this.el = el; } /** * @return {?} */ onResize() { this.matchHeight(this.el.nativeElement, this.matchHeightClassName); } /** * @return {?} */ ngAfterViewChecked() { this.matchHeight(this.el.nativeElement, this.matchHeightClassName); } /** * @param {?} parent * @param {?} className * @return {?} */ matchHeight(parent, className) { if (!parent) { return; } // step 1: find all the child elements with the selected class name /** @type {?} */ const children = parent.getElementsByClassName(className); if (!children) { return; } // step 1b: reset all children height Array.from(children).forEach((/** * @param {?} x * @return {?} */ (x) => { x.style.height = 'initial'; })); // step 2a: get all the child elements heights /** @type {?} */ const itemHeights = Array.from(children) .map((/** * @param {?} x * @return {?} */ x => x.getBoundingClientRect().height)); // step 2b: find out the tallest /** @type {?} */ const maxHeight = itemHeights.reduce((/** * @param {?} prev * @param {?} curr * @return {?} */ (prev, curr) => { return curr > prev ? curr : prev; }), 0); // step 3: update all the child elements to the tallest height Array.from(children) .forEach((/** * @param {?} x * @return {?} */ (x) => x.style.height = `${maxHeight}px`)); } } NeoMatchHeightDirective.decorators = [ { type: Directive, args: [{ selector: '[neoMatchHeight]' },] } ]; /** @nocollapse */ NeoMatchHeightDirective.ctorParameters = () => [ { type: ElementRef } ]; NeoMatchHeightDirective.propDecorators = { matchHeightClassName: [{ type: Input, args: ['neoMatchHeight',] }], onResize: [{ type: HostListener, args: ['window:resize',] }] }; if (false) { /** @type {?} */ NeoMatchHeightDirective.prototype.matchHeightClassName; /** * @type {?} * @private */ NeoMatchHeightDirective.prototype.el; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVvLW1hdGNoaGVpZ2h0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLWRpcmVjdGl2ZXMvIiwic291cmNlcyI6WyJsaWIvbmVvLW1hdGNoaGVpZ2h0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQUUsVUFBVSxFQUNyQixLQUFLLEVBQUUsWUFBWSxFQUN0QixNQUFNLGVBQWUsQ0FBQztBQUt2QixNQUFNLE9BQU8sdUJBQXVCOzs7O0lBT2hDLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO0lBQ2xDLENBQUM7Ozs7SUFMOEIsUUFBUTtRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Ozs7SUFLRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Ozs7OztJQUVNLFdBQVcsQ0FBQyxNQUFtQixFQUFFLFNBQWlCO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPO1NBQUU7OztjQUdsQixRQUFRLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQztRQUV6RCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBRTFCLHFDQUFxQztRQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxDQUFDLENBQWMsRUFBRSxFQUFFO1lBQzVDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMvQixDQUFDLEVBQUMsQ0FBQzs7O2NBR0csV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ25DLEdBQUc7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sRUFBQzs7O2NBR3pDLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTTs7Ozs7UUFBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNoRCxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3JDLENBQUMsR0FBRSxDQUFDLENBQUM7UUFFTCw4REFBOEQ7UUFDOUQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDZixPQUFPOzs7O1FBQUMsQ0FBQyxDQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsU0FBUyxJQUFJLEVBQUMsQ0FBQztJQUN4RSxDQUFDOzs7WUExQ0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxrQkFBa0I7YUFDL0I7Ozs7WUFOYyxVQUFVOzs7bUNBUXBCLEtBQUssU0FBQyxnQkFBZ0I7dUJBRXRCLFlBQVksU0FBQyxlQUFlOzs7O0lBRjdCLHVEQUFzRDs7Ozs7SUFNMUMscUNBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgSW5wdXQsIEhvc3RMaXN0ZW5lclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbmVvTWF0Y2hIZWlnaHRdJ1xufSlcbmV4cG9ydCBjbGFzcyBOZW9NYXRjaEhlaWdodERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQge1xuICAgIEBJbnB1dCgnbmVvTWF0Y2hIZWlnaHQnKSBtYXRjaEhlaWdodENsYXNzTmFtZTogc3RyaW5nO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpIG9uUmVzaXplKCkge1xuICAgICAgICB0aGlzLm1hdGNoSGVpZ2h0KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5tYXRjaEhlaWdodENsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5tYXRjaEhlaWdodCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMubWF0Y2hIZWlnaHRDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEhlaWdodChwYXJlbnQ6IEhUTUxFbGVtZW50LCBjbGFzc05hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXBhcmVudCkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBzdGVwIDE6IGZpbmQgYWxsIHRoZSBjaGlsZCBlbGVtZW50cyB3aXRoIHRoZSBzZWxlY3RlZCBjbGFzcyBuYW1lXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblxuICAgICAgICBpZiAoIWNoaWxkcmVuKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIHN0ZXAgMWI6IHJlc2V0IGFsbCBjaGlsZHJlbiBoZWlnaHRcbiAgICAgICAgQXJyYXkuZnJvbShjaGlsZHJlbikuZm9yRWFjaCgoeDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHguc3R5bGUuaGVpZ2h0ID0gJ2luaXRpYWwnO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzdGVwIDJhOiBnZXQgYWxsIHRoZSBjaGlsZCBlbGVtZW50cyBoZWlnaHRzXG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHRzID0gQXJyYXkuZnJvbShjaGlsZHJlbilcbiAgICAgICAgICAgIC5tYXAoeCA9PiB4LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7XG5cbiAgICAgICAgLy8gc3RlcCAyYjogZmluZCBvdXQgdGhlIHRhbGxlc3RcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gaXRlbUhlaWdodHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VyciA+IHByZXYgPyBjdXJyIDogcHJldjtcbiAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgLy8gc3RlcCAzOiB1cGRhdGUgYWxsIHRoZSBjaGlsZCBlbGVtZW50cyB0byB0aGUgdGFsbGVzdCBoZWlnaHRcbiAgICAgICAgQXJyYXkuZnJvbShjaGlsZHJlbilcbiAgICAgICAgICAgIC5mb3JFYWNoKCh4OiBIVE1MRWxlbWVudCkgPT4geC5zdHlsZS5oZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgKTtcbiAgICB9XG59Il19