@raphy/ngx-equalizer
Version:
A library to equalize height and width of elements with Angular4+
293 lines (282 loc) • 19.4 kB
JavaScript
import { Injectable, Directive, ElementRef, Input, ContentChildren, HostListener, QueryList, Renderer2, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var EqualizerService = /** @class */ (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: Injectable },
];
return EqualizerService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var EqualizerWatcherDirective = /** @class */ (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: Directive, args: [{
selector: '[equalizerWatcher]'
},] },
];
/** @nocollapse */
EqualizerWatcherDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
EqualizerWatcherDirective.propDecorators = {
_id: [{ type: Input, args: ['equalizerWatcher',] }]
};
return EqualizerWatcherDirective;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var EqualizerDirective = /** @class */ (function () {
function EqualizerDirective(_elementRef, _renderer, _equalizerService) {
this._elementRef = _elementRef;
this._renderer = _renderer;
this._equalizerService = _equalizerService;
this._params = 'height';
this._watchers = new 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: Directive, args: [{
selector: '[equalizer]',
exportAs: 'equalizer'
},] },
];
/** @nocollapse */
EqualizerDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: EqualizerService }
]; };
EqualizerDirective.propDecorators = {
_params: [{ type: Input, args: ['equalizer',] }],
_id: [{ type: Input, args: ['equalizerId',] }],
_watchers: [{ type: ContentChildren, args: [EqualizerWatcherDirective, { read: EqualizerWatcherDirective },] }],
_onResize: [{ type: 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 = /** @class */ (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: NgModule, args: [{
imports: [
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
*/
export { EqualizerDirective, EqualizerWatcherDirective, EqualizerService, EqualizerModule, EqualizerDirective as ɵa, EqualizerWatcherDirective as ɵb, EqualizerService as ɵc };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaHktbmd4LWVxdWFsaXplci5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHJhcGh5L25neC1lcXVhbGl6ZXIvbGliL3NlcnZpY2VzL2VxdWFsaXplci5zZXJ2aWNlLnRzIiwibmc6Ly9AcmFwaHkvbmd4LWVxdWFsaXplci9saWIvZGlyZWN0aXZlcy9lcXVhbGl6ZXItd2F0Y2hlci5kaXJlY3RpdmUudHMiLCJuZzovL0ByYXBoeS9uZ3gtZXF1YWxpemVyL2xpYi9kaXJlY3RpdmVzL2VxdWFsaXplci5kaXJlY3RpdmUudHMiLCJuZzovL0ByYXBoeS9uZ3gtZXF1YWxpemVyL2xpYi9lcXVhbGl6ZXIubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFcXVhbGl6ZVBhcmFtcyB9IGZyb20gJy4uL2VxdWFsaXplLXBhcmFtcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFcXVhbGl6ZXJTZXJ2aWNlIHtcbiAgICBwdWJsaWMgZXF1YWxpemUoXG4gICAgICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIGVsZW1lbnRSZWZzOiBFbGVtZW50UmVmW10sXG4gICAgICAgIHBhcmFtczogRXF1YWxpemVQYXJhbXMgPSB7cHJvcGVydHk6ICdoZWlnaHQnLCByZXNldDogdHJ1ZX1cbiAgICApIHtcblxuICAgICAgICBsZXQgbWF4VmFsdWU6IG51bWJlciA9IDA7XG5cbiAgICAgICAgZWxlbWVudFJlZnMubWFwKFxuICAgICAgICAgICAgKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcGFyYW1zLnByb3BlcnR5LCAnaW5pdGlhbCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBudW1iZXIgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRbJ29mZnNldCcgKyBwYXJhbXMucHJvcGVydHlbMF0udG9VcHBlckNhc2UoKSArIHBhcmFtcy5wcm9wZXJ0eS5zbGljZSgxKV07XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSB2YWx1ZSA+IG1heFZhbHVlID8gdmFsdWUgOiBtYXhWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBlbGVtZW50UmVmcy5tYXAoXG4gICAgICAgICAgICAoZWxlbWVudFJlZjogRWxlbWVudFJlZikgPT4ge1xuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcGFyYW1zLnByb3BlcnR5LCBtYXhWYWx1ZSArICdweCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZXF1YWxpemVyV2F0Y2hlcl0nXG59KVxuZXhwb3J0IGNsYXNzIEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmUge1xuICAgIEBJbnB1dCgnZXF1YWxpemVyV2F0Y2hlcicpXG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZyB8IG51bWJlcjtcblxuICAgIGdldCBlbGVtZW50UmVmKCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZjtcbiAgICB9XG5cbiAgICBnZXQgaWQoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDb250ZW50Q2hpbGRyZW4sIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRXF1YWxpemVQYXJhbXMgfSBmcm9tICcuLi9lcXVhbGl6ZS1wYXJhbXMnO1xuaW1wb3J0IHsgRXF1YWxpemVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2luZGV4JztcbmltcG9ydCB7IEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmUgfSBmcm9tICcuL2VxdWFsaXplci13YXRjaGVyLmRpcmVjdGl2ZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZXF1YWxpemVyXScsXG4gICAgZXhwb3J0QXM6ICdlcXVhbGl6ZXInXG59KVxuZXhwb3J0IGNsYXNzIEVxdWFsaXplckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQge1xuICAgIEBJbnB1dCgnZXF1YWxpemVyJylcbiAgICBwcml2YXRlIF9wYXJhbXM6ICdoZWlnaHQnIHwgJ3dpZHRoJyB8IEVxdWFsaXplUGFyYW1zID0gJ2hlaWdodCc7XG5cbiAgICBASW5wdXQoJ2VxdWFsaXplcklkJylcbiAgICBwcml2YXRlIF9pZDogc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihFcXVhbGl6ZXJXYXRjaGVyRGlyZWN0aXZlLCB7cmVhZDogRXF1YWxpemVyV2F0Y2hlckRpcmVjdGl2ZX0pXG4gICAgcHJpdmF0ZSBfd2F0Y2hlcnM6IFF1ZXJ5TGlzdDxFcXVhbGl6ZXJXYXRjaGVyRGlyZWN0aXZlPiA9IG5ldyBRdWVyeUxpc3Q8RXF1YWxpemVyV2F0Y2hlckRpcmVjdGl2ZT4oKTtcblxuICAgIGdldCBwYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJhbXM7XG4gICAgfVxuXG4gICAgc2V0IHBhcmFtcyh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9wYXJhbXMgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLmVxdWFsaXplKCk7XG4gICAgfVxuXG4gICAgZ2V0IGVsZW1lbnRSZWYoKTogRWxlbWVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmO1xuICAgIH1cblxuICAgIGdldCBpZCgpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XG4gICAgfVxuXG4gICAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBfZXF1YWxpemVyU2VydmljZTogRXF1YWxpemVyU2VydmljZVxuICAgICkge1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXF1YWxpemUoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBwcml2YXRlIF9vblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lcXVhbGl6ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcXVhbGl6ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9wYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmFtcyA9ICdoZWlnaHQnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBFcXVhbGl6ZVBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe3Byb3BlcnR5OiAnaGVpZ2h0JywgcmVzZXQ6IHRydWV9LCB0eXBlb2YgdGhpcy5fcGFyYW1zID09PSAnc3RyaW5nJyA/IHtwcm9wZXJ0eTogdGhpcy5fcGFyYW1zfSA6IHRoaXMuX3BhcmFtcyk7XG4gICAgICAgIGNvbnN0IHdhdGNoZXJzOiBFbGVtZW50UmVmW10gPSB0aGlzLl93YXRjaGVycy5maWx0ZXIoKHdhdGNoZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJRCBtYXRjaGluZycsIHdhdGNoZXIuaWQsIHRoaXMuaWQpO1xuICAgICAgICAgICAgaWYgKHdhdGNoZXIuaWQgfHwgdGhpcy5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3YXRjaGVyLmlkID09PSB0aGlzLmlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gd2F0Y2hlci5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgfSkubWFwKCh3YXRjaGVyKSA9PiB3YXRjaGVyLmVsZW1lbnRSZWYpO1xuXG4gICAgICAgIHRoaXMuX2VxdWFsaXplclNlcnZpY2UuZXF1YWxpemUoXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcixcbiAgICAgICAgICAgIHdhdGNoZXJzLFxuICAgICAgICAgICAgcGFyYW1zXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEVxdWFsaXplckRpcmVjdGl2ZSwgRXF1YWxpemVyV2F0Y2hlckRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBFcXVhbGl6ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIEVxdWFsaXplckRpcmVjdGl2ZSxcbiAgICAgICAgRXF1YWxpemVyV2F0Y2hlckRpcmVjdGl2ZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBFcXVhbGl6ZXJEaXJlY3RpdmUsXG4gICAgICAgIEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmUsXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgRXF1YWxpemVyU2VydmljZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFcXVhbGl6ZXJNb2R1bGUge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBFcXVhbGl6ZXJNb2R1bGUsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICBFcXVhbGl6ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZm9yQ2hpbGQoKTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogRXF1YWxpemVyTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgRXF1YWxpemVyU2VydmljZVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7Ozs7OztJQU1XLG1DQUFROzs7Ozs7Y0FDWCxRQUFtQixFQUNuQixXQUF5QixFQUN6QixNQUEwRDtRQUExRCx1QkFBQSxFQUFBLFdBQTBCLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztRQUcxRCxxQkFB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