UNPKG

@raphy/ngx-equalizer

Version:

A library to equalize height and width of elements with Angular4+

304 lines (291 loc) 21.6 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common')) : typeof define === 'function' && define.amd ? define('@raphy/ngx-equalizer', ['exports', '@angular/core', '@angular/common'], factory) : (factory((global.raphy = global.raphy || {}, global.raphy['ngx-equalizer'] = {}),global.ng.core,global.ng.common)); }(this, (function (exports,core,common) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var EqualizerService = (function () { function EqualizerService() { } /** * @param {?} renderer * @param {?} elementRefs * @param {?=} params * @return {?} */ EqualizerService.prototype.equalize = /** * @param {?} renderer * @param {?} elementRefs * @param {?=} params * @return {?} */ function (renderer, elementRefs, params) { if (params === void 0) { params = { property: 'height', reset: true }; } var /** @type {?} */ maxValue = 0; elementRefs.map(function (elementRef) { if (params.reset) { renderer.setStyle(elementRef.nativeElement, params.property, 'initial'); } var /** @type {?} */ value = elementRef.nativeElement['offset' + params.property[0].toUpperCase() + params.property.slice(1)]; maxValue = value > maxValue ? value : maxValue; }); elementRefs.map(function (elementRef) { renderer.setStyle(elementRef.nativeElement, params.property, maxValue + 'px'); }); }; EqualizerService.decorators = [ { type: core.Injectable }, ]; return EqualizerService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var EqualizerWatcherDirective = (function () { function EqualizerWatcherDirective(_elementRef) { this._elementRef = _elementRef; } Object.defineProperty(EqualizerWatcherDirective.prototype, "elementRef", { get: /** * @return {?} */ function () { return this._elementRef; }, enumerable: true, configurable: true }); Object.defineProperty(EqualizerWatcherDirective.prototype, "id", { get: /** * @return {?} */ function () { return this._id; }, set: /** * @param {?} value * @return {?} */ function (value) { this._id = value; }, enumerable: true, configurable: true }); EqualizerWatcherDirective.decorators = [ { type: core.Directive, args: [{ selector: '[equalizerWatcher]' },] }, ]; /** @nocollapse */ EqualizerWatcherDirective.ctorParameters = function () { return [ { type: core.ElementRef } ]; }; EqualizerWatcherDirective.propDecorators = { _id: [{ type: core.Input, args: ['equalizerWatcher',] }] }; return EqualizerWatcherDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var EqualizerDirective = (function () { function EqualizerDirective(_elementRef, _renderer, _equalizerService) { this._elementRef = _elementRef; this._renderer = _renderer; this._equalizerService = _equalizerService; this._params = 'height'; this._watchers = new core.QueryList(); } Object.defineProperty(EqualizerDirective.prototype, "params", { get: /** * @return {?} */ function () { return this._params; }, set: /** * @param {?} value * @return {?} */ function (value) { this._params = value; this.equalize(); }, enumerable: true, configurable: true }); Object.defineProperty(EqualizerDirective.prototype, "elementRef", { get: /** * @return {?} */ function () { return this._elementRef; }, enumerable: true, configurable: true }); Object.defineProperty(EqualizerDirective.prototype, "id", { get: /** * @return {?} */ function () { return this._id; }, set: /** * @param {?} value * @return {?} */ function (value) { this._id = value; }, enumerable: true, configurable: true }); /** * @return {?} */ EqualizerDirective.prototype.ngAfterViewChecked = /** * @return {?} */ function () { this.equalize(); }; /** * @return {?} */ EqualizerDirective.prototype._onResize = /** * @return {?} */ function () { this.equalize(); }; /** * @return {?} */ EqualizerDirective.prototype.equalize = /** * @return {?} */ function () { var _this = this; if (!this._params) { this._params = 'height'; } var /** @type {?} */ params = Object.assign({ property: 'height', reset: true }, typeof this._params === 'string' ? { property: this._params } : this._params); var /** @type {?} */ watchers = this._watchers.filter(function (watcher) { console.log('ID matching', watcher.id, _this.id); if (watcher.id || _this.id) { return watcher.id === _this.id; } return watcher.elementRef.nativeElement !== _this._elementRef.nativeElement; }).map(function (watcher) { return watcher.elementRef; }); this._equalizerService.equalize(this._renderer, watchers, params); }; EqualizerDirective.decorators = [ { type: core.Directive, args: [{ selector: '[equalizer]', exportAs: 'equalizer' },] }, ]; /** @nocollapse */ EqualizerDirective.ctorParameters = function () { return [ { type: core.ElementRef }, { type: core.Renderer2 }, { type: EqualizerService } ]; }; EqualizerDirective.propDecorators = { _params: [{ type: core.Input, args: ['equalizer',] }], _id: [{ type: core.Input, args: ['equalizerId',] }], _watchers: [{ type: core.ContentChildren, args: [EqualizerWatcherDirective, { read: EqualizerWatcherDirective },] }], _onResize: [{ type: core.HostListener, args: ['window:resize',] }] }; return EqualizerDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var EqualizerModule = (function () { function EqualizerModule() { } /** * @return {?} */ EqualizerModule.forRoot = /** * @return {?} */ function () { return { ngModule: EqualizerModule, providers: [ EqualizerService, ] }; }; /** * @return {?} */ EqualizerModule.forChild = /** * @return {?} */ function () { return { ngModule: EqualizerModule, providers: [ EqualizerService ] }; }; EqualizerModule.decorators = [ { type: core.NgModule, args: [{ imports: [ common.CommonModule, ], exports: [ EqualizerDirective, EqualizerWatcherDirective, ], declarations: [ EqualizerDirective, EqualizerWatcherDirective, ], providers: [ EqualizerService, ], },] }, ]; return EqualizerModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ exports.EqualizerDirective = EqualizerDirective; exports.EqualizerWatcherDirective = EqualizerWatcherDirective; exports.EqualizerService = EqualizerService; exports.EqualizerModule = EqualizerModule; exports.ɵa = EqualizerDirective; exports.ɵb = EqualizerWatcherDirective; exports.ɵc = EqualizerService; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaHktbmd4LWVxdWFsaXplci51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL0ByYXBoeS9uZ3gtZXF1YWxpemVyL2xpYi9zZXJ2aWNlcy9lcXVhbGl6ZXIuc2VydmljZS50cyIsIm5nOi8vQHJhcGh5L25neC1lcXVhbGl6ZXIvbGliL2RpcmVjdGl2ZXMvZXF1YWxpemVyLXdhdGNoZXIuZGlyZWN0aXZlLnRzIiwibmc6Ly9AcmFwaHkvbmd4LWVxdWFsaXplci9saWIvZGlyZWN0aXZlcy9lcXVhbGl6ZXIuZGlyZWN0aXZlLnRzIiwibmc6Ly9AcmFwaHkvbmd4LWVxdWFsaXplci9saWIvZXF1YWxpemVyLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRXF1YWxpemVQYXJhbXMgfSBmcm9tICcuLi9lcXVhbGl6ZS1wYXJhbXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRXF1YWxpemVyU2VydmljZSB7XG4gICAgcHVibGljIGVxdWFsaXplKFxuICAgICAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBlbGVtZW50UmVmczogRWxlbWVudFJlZltdLFxuICAgICAgICBwYXJhbXM6IEVxdWFsaXplUGFyYW1zID0ge3Byb3BlcnR5OiAnaGVpZ2h0JywgcmVzZXQ6IHRydWV9XG4gICAgKSB7XG5cbiAgICAgICAgbGV0IG1heFZhbHVlOiBudW1iZXIgPSAwO1xuXG4gICAgICAgIGVsZW1lbnRSZWZzLm1hcChcbiAgICAgICAgICAgIChlbGVtZW50UmVmOiBFbGVtZW50UmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXNldCkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHBhcmFtcy5wcm9wZXJ0eSwgJ2luaXRpYWwnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZTogbnVtYmVyID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50WydvZmZzZXQnICsgcGFyYW1zLnByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwYXJhbXMucHJvcGVydHkuc2xpY2UoMSldO1xuICAgICAgICAgICAgICAgIG1heFZhbHVlID0gdmFsdWUgPiBtYXhWYWx1ZSA/IHZhbHVlIDogbWF4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgZWxlbWVudFJlZnMubWFwKFxuICAgICAgICAgICAgKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpID0+IHtcbiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHBhcmFtcy5wcm9wZXJ0eSwgbWF4VmFsdWUgKyAncHgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2VxdWFsaXplcldhdGNoZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBFcXVhbGl6ZXJXYXRjaGVyRGlyZWN0aXZlIHtcbiAgICBASW5wdXQoJ2VxdWFsaXplcldhdGNoZXInKVxuICAgIHByaXZhdGUgX2lkOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICBnZXQgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWY7XG4gICAgfVxuXG4gICAgZ2V0IGlkKCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG5cbiAgICBzZXQgaWQodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEVxdWFsaXplUGFyYW1zIH0gZnJvbSAnLi4vZXF1YWxpemUtcGFyYW1zJztcbmltcG9ydCB7IEVxdWFsaXplclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbmRleCc7XG5pbXBvcnQgeyBFcXVhbGl6ZXJXYXRjaGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9lcXVhbGl6ZXItd2F0Y2hlci5kaXJlY3RpdmUnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2VxdWFsaXplcl0nLFxuICAgIGV4cG9ydEFzOiAnZXF1YWxpemVyJ1xufSlcbmV4cG9ydCBjbGFzcyBFcXVhbGl6ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcbiAgICBASW5wdXQoJ2VxdWFsaXplcicpXG4gICAgcHJpdmF0ZSBfcGFyYW1zOiAnaGVpZ2h0JyB8ICd3aWR0aCcgfCBFcXVhbGl6ZVBhcmFtcyA9ICdoZWlnaHQnO1xuXG4gICAgQElucHV0KCdlcXVhbGl6ZXJJZCcpXG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZyB8IG51bWJlcjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oRXF1YWxpemVyV2F0Y2hlckRpcmVjdGl2ZSwge3JlYWQ6IEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmV9KVxuICAgIHByaXZhdGUgX3dhdGNoZXJzOiBRdWVyeUxpc3Q8RXF1YWxpemVyV2F0Y2hlckRpcmVjdGl2ZT4gPSBuZXcgUXVlcnlMaXN0PEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmU+KCk7XG5cbiAgICBnZXQgcGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xuICAgIH1cblxuICAgIHNldCBwYXJhbXModmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5lcXVhbGl6ZSgpO1xuICAgIH1cblxuICAgIGdldCBlbGVtZW50UmVmKCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZjtcbiAgICB9XG5cbiAgICBnZXQgaWQoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX2VxdWFsaXplclNlcnZpY2U6IEVxdWFsaXplclNlcnZpY2VcbiAgICApIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVxdWFsaXplKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gICAgcHJpdmF0ZSBfb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXF1YWxpemUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXF1YWxpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJhbXMgPSAnaGVpZ2h0JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtczogRXF1YWxpemVQYXJhbXMgPSBPYmplY3QuYXNzaWduKHtwcm9wZXJ0eTogJ2hlaWdodCcsIHJlc2V0OiB0cnVlfSwgdHlwZW9mIHRoaXMuX3BhcmFtcyA9PT0gJ3N0cmluZycgPyB7cHJvcGVydHk6IHRoaXMuX3BhcmFtc30gOiB0aGlzLl9wYXJhbXMpO1xuICAgICAgICBjb25zdCB3YXRjaGVyczogRWxlbWVudFJlZltdID0gdGhpcy5fd2F0Y2hlcnMuZmlsdGVyKCh3YXRjaGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnSUQgbWF0Y2hpbmcnLCB3YXRjaGVyLmlkLCB0aGlzLmlkKTtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyLmlkIHx8IHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2F0Y2hlci5pZCA9PT0gdGhpcy5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHdhdGNoZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH0pLm1hcCgod2F0Y2hlcikgPT4gd2F0Y2hlci5lbGVtZW50UmVmKTtcblxuICAgICAgICB0aGlzLl9lcXVhbGl6ZXJTZXJ2aWNlLmVxdWFsaXplKFxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIsXG4gICAgICAgICAgICB3YXRjaGVycyxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFcXVhbGl6ZXJEaXJlY3RpdmUsIEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRXF1YWxpemVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBFcXVhbGl6ZXJEaXJlY3RpdmUsXG4gICAgICAgIEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmUsXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgRXF1YWxpemVyRGlyZWN0aXZlLFxuICAgICAgICBFcXVhbGl6ZXJXYXRjaGVyRGlyZWN0aXZlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEVxdWFsaXplclNlcnZpY2UsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRXF1YWxpemVyTW9kdWxlIHtcbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogRXF1YWxpemVyTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgRXF1YWxpemVyU2VydmljZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZvckNoaWxkKCk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IEVxdWFsaXplck1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIEVxdWFsaXplclNlcnZpY2VcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiSW5qZWN0YWJsZSIsIkRpcmVjdGl2ZSIsIkVsZW1lbnRSZWYiLCJJbnB1dCIsIlF1ZXJ5TGlzdCIsIlJlbmRlcmVyMiIsIkNvbnRlbnRDaGlsZHJlbiIsIkhvc3RMaXN0ZW5lciIsIk5nTW9kdWxlIiwiQ29tbW9uTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FB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