@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
JavaScript
/**
* @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